全文总结:
在读取Cookie,然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的:
cookie.getMaxAge();
cookie.getDomain();
。。。
因为,客户端传来的时候,就只剩下key和value了。
Java中的Cookie操作:
在Java中利用Serlvet或者JSP scriptlet可以向浏览器端写入Cookie。
同样,利用Servet或者JSP scriptlet 也可以读取到 Cookie信息。
Servlet规范中的Cookie API 如下:
setMaxAge setPath setDomain等方法,可以对Cookie状态进行控制;
同样存在如下方法,可以获得相应的状态:
getMaxAge getPath getDomain等方法,可以对Cookie的状态。
然后,问题来了:
读取Cookie时,发现除了Cookie的key和value外,其他的信息都丢失了!!
原因很简单:
Cookie从服务器端发送到客户端时,信息是完整的;
Cookie从客户器端发送到服务端时,信息只剩下key、value了。
(想想也明白,Domain不对的Cookie、Path不对的Cookie、过期的Cookie,客户端是不会发送过来的。)
那为什么Java中提供了相应的get方法呢? 那个方法是在生成Cookie后,尚未发送到客户端时,使用的。是“封装”的体现吧 O(∩_∩)O~
案例说话:
写入Cookie的Servlet
package edu.xjtu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AddCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie cookie01 = new Cookie("site","JavaEye");
cookie01.setMaxAge(60*60*1);
cookie01.setPath("/");
Cookie cookie02 = new Cookie("name","xiaolongfeixiang");
cookie02.setMaxAge(60*60*2);
cookie02.setPath("/servlet");
response.addCookie(cookie01);
response.addCookie(cookie02);
response.setContentType("text/html;charset=UTF8");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(" cookie写入了");
out.println(" <a href='show'> 查看cookie </a>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
读取Cookie的Servlet
package edu.xjtu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
StringBuffer buffer = new StringBuffer();
for(Cookie cookie : cookies){
buffer.append(cookie.getName()).append(" : ").append(cookie.getValue());
buffer.append(" -- ").append(" MaxAge : "+cookie.getMaxAge());
buffer.append(" -- ").append(" Path : "+cookie.getPath()).append("<br/>");
}
response.setContentType("text/html;charset=UTF8");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(" 读取的Cookie:<br>");
out.println(buffer.toString());
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
写入Cookie的页面
:
Response的信息如下:(信息齐全!!)
查看Cookie的页面:(发现结果丢了一部分:)
看浏览器的Cookie
:
Cookie: name 属性都对着的
Cookie: site 属性也都对着的
再看看网络:(发现传过来的Cookie都只有key-value了。所以那些状态信息都丢失了!!)
验证了前面的总结:
在读取Cookie然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的:
cookie.getMaxAge();
cookie.getDomain();
。。。
因为,客户端传来的时候,就只剩下key和value了。
感谢rentianchou,在解决他(她)提出的问题时,我做了这个实验!!谢谢rentianchou
- 大小: 6.7 KB
- 大小: 5 KB
- 大小: 15.4 KB
- 大小: 4.8 KB
- 大小: 15.6 KB
- 大小: 15.7 KB
分享到:
相关推荐
jQuery Cookie是jQuery的一个插件,为开发者提供了方便、简洁的API来操作Cookie,无需处理复杂的原生JavaScript API。这个压缩包包含了一个中文版的使用手册和对源代码的详细注释,对于学习和使用jQuery Cookie非常...
在下载验证码图片后,还需要注意到获取验证码时的一个陷阱:请求中包含了随机数以防止缓存,所以我们需要在URL末尾添加一个随机值。 ```python import random captcha_url = soup.find("img", id="captchaImg")['...
- **登录验证中的Cookie操作:** 在用户登录后,通常会通过设置Cookie来记录用户的登录状态。示例代码如下: ```php if ($adminuser == $user && $adminpass == $pass) { setcookie("login", "yes", time() + ...
网页中设置一些陷阱(正常用户访问不到但是爬虫可以访问到) 解决办法:分析网页,避开这些特殊陷阱 请求间隔太短,返回相同的数据 解决办法:增加请求间隔 3、js加密 反爬方式中较为难处理的一类。 js加密的原理:...
6. 线程和进程的区别是线程是最小的执行单元,进程是最小的资源管理单元,一个线程只能属于一个进程,而一个进程可以有多个线程。 7. 服务器集群负载均衡原理是使用增加服务器数量来进行横向扩展,使用集群和负载...
在Yupoo的案例中,攻击者利用一处XSS漏洞,构造了一个能够读取用户Cookie的恶意脚本。通过JavaScript和PHP的结合,攻击者不仅获取了用户的Cookie信息,还成功地进行了Cookie伪造,实现了对用户账户的非法访问。 **...
4. "有关 JavaScript 的 10 件让人费解的事情 - CSDN资讯.mht":这是一个关于JavaScript中的一些常见陷阱和不寻常特性的文章,可以帮助开发者避免常见错误,提高编程技巧。 5. "引用js大全.txt"、"JS.txt"、"js分页...
11.3.2.1 模拟对话框--创建一个窗口对话框及一个对话框阻塞进行的例子 11.3.2.2 showModalDialog和showModelessDialog--非W3C或ECMAScrip标准 11.3.3 状态栏 11.4 框架--上层的Window对象 11.4.1 ...
总的来说,"投票调查功能的ASP例"涉及了ASP基础、数据库操作、用户交互以及Web开发的多个方面,是学习ASP动态网站开发的一个典型应用场景。通过这个实例,开发者可以深入理解如何在实际项目中运用ASP技术,构建功能...
3. 自动登录实现:这部分代码将处理自动登录的逻辑,比如保存用户的凭据以便下次自动填充,以及在用户设备上设置cookie或本地存储以标识已登录状态。 4. 安全措施:由于“fake”一词,源码可能包含了对不安全自动...
3. **处理Spider Traps**:爬虫陷阱是指网站设计用来捕获爬虫的机制,如动态URL、无限循环链接等。应对策略包括: - 对于动态URL,可尝试识别并统一处理。 - 遇到循环链接时,设定循环检测阈值,超过阈值则停止...
例如,`$lifeTime = 2 * 3600`表示2小时,`setcookie()`函数用于设置cookie,确保session ID在客户端有效。接着,我们将预设的密码(在这个例子中是`'fsdbkitchen2014'`)存储到`$_SESSION['downloadpwd']`中。 3. ...
这个压缩包提供的是一个以ASP技术构建的茶叶公司网站的实例开发源码,结合了古典风格的设计和实际的功能,旨在帮助学习者理解如何用ASP来创建一个具有商业价值的网站。 该网站实例主要包含以下几个方面的知识点: ...
- **Cookie**:理解Cookie的概念,学会如何设置和读取Cookie,实现简单的用户登录状态保存。 #### 四、数据库操作 - **关系型数据库**:介绍如何使用PHP与MySQL或Oracle等关系型数据库进行交互,包括连接数据库、...
然而,示例代码中展示了变量作用域的一个常见陷阱:全局变量与局部变量的混淆。例如,在函数`test()`外部声明的`var goal = 1;`在函数内部未被重新声明,导致函数内部可以直接访问并可能修改这个全局变量。这在实际...
PHP是免费的,而且拥有一个活跃的社区,这使得开发者能够获取丰富的资源和支持。 这个“PHP中文参考手册”是一个非常实用的工具,对于学习和精通PHP编程至关重要。CHM(Compiled Help Manual)格式是一种由微软开发...
`http-equiv`是一个特殊的指令,它允许网页模拟HTTP头部信息,对页面的行为进行控制。在描述中提到的“code mass questions”可能是指大量关于如何正确使用`http-equiv`的代码问题或挑战。 在HTML中,`<meta>`标签...
同样,在例2中,`isset()` 和连接符 `.` 的优先级关系导致了一个未定义索引的错误。理解这些优先级对于避免运行时错误至关重要。 2. **大小写敏感性**: PHP中函数名和类名是不区分大小写的,但变量名是区分大小写...
数据的存储也是网络爬虫程序开发过程中的一个重要环节。本研究中选择将爬取的数据保存在MySQL数据库中。MySQL是一种关系型数据库管理系统,它通过结构化查询语言SQL来管理和操纵数据。在存入数据之前,需要先建立...
一个Servlet可以与多个过滤器关联,一个过滤器也可以被多个Servlet使用,但并非每个Servlet都必须有至少一个过滤器,同样,并非每个过滤器都必须部署到至少一个Servlet。正确答案是A. 可以为一个Servlet部署多个过滤...