最近小研究了一下cookie,发现有人已经总结好了,我就懒得自己写了。转载一下,感谢作者:
原文地址:http://xiaolongfeixiang.iteye.com/blog/656454
全文总结:
在读取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();
- }
-
- }
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();
-
- }
-
- }
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
分享到:
相关推荐
jQuery Cookie是jQuery的一个插件,为开发者提供了方便、简洁的API来操作Cookie,无需处理复杂的原生JavaScript API。这个压缩包包含了一个中文版的使用手册和对源代码的详细注释,对于学习和使用jQuery Cookie非常...
PHP的历史见证了其从一个简单的个人主页工具发展成为功能全面、广泛应用的Web开发语言的过程。 #### 二、PHP语言基础 - **数据类型**:了解PHP中的基本数据类型,包括整型、浮点型、字符串、布尔型等,以及复合...
在下载验证码图片后,还需要注意到获取验证码时的一个陷阱:请求中包含了随机数以防止缓存,所以我们需要在URL末尾添加一个随机值。 ```python import random captcha_url = soup.find("img", id="captchaImg")['...
4. "有关 JavaScript 的 10 件让人费解的事情 - CSDN资讯.mht":这是一个关于JavaScript中的一些常见陷阱和不寻常特性的文章,可以帮助开发者避免常见错误,提高编程技巧。 5. "引用js大全.txt"、"JS.txt"、"js分页...
在Yupoo的案例中,攻击者利用一处XSS漏洞,构造了一个能够读取用户Cookie的恶意脚本。通过JavaScript和PHP的结合,攻击者不仅获取了用户的Cookie信息,还成功地进行了Cookie伪造,实现了对用户账户的非法访问。 **...
- **JavaScript操作Cookie的风险:** 使用JavaScript可以直接修改或获取Cookie的值,这可能会带来安全风险。 - 示例: ```javascript javascript:alert(document.cookie = "login=yes") ``` - **结论:** 在...
- **SSL的工作原理**:通过建立一个加密的数据通道来确保数据传输的安全性。 - **SSL的特点**:支持多种加密算法,能够提供端到端的安全保障。 #### 1.3 SSL协议存在的问题 - **安全性挑战**:随着技术的进步,早期...
11.3.2.1 模拟对话框--创建一个窗口对话框及一个对话框阻塞进行的例子 11.3.2.2 showModalDialog和showModelessDialog--非W3C或ECMAScrip标准 11.3.3 状态栏 11.4 框架--上层的Window对象 11.4.1 ...
- 当客户端首次访问服务器时,如果没有 `PHPSESSID` Cookie,则服务器会为该客户端创建一个新的 `PHPSESSID` 并将其保存在Cookie中。 - 如果客户端再次访问服务器,并带有 `PHPSESSID` Cookie,则服务器会根据该 `...
- **数值类型**:介绍了数值的基本操作和常见陷阱,例如整数溢出和浮点数的精度问题。 - **字符串类型**:讲解了字符串的拼接、分割、替换等操作,以及正则表达式的使用。 - **布尔类型**:解释了布尔值的逻辑...
是一组脚本,它们执行诸如,查找Cookie,令牌和极其个人化的文件之类的操作,一路创建蠕虫并远程操作摄像机上的实时流,并以27屏显示。 Gotcha!-Original 原始的陷阱!脚本是彼此之间的基础。它包括许多用途,但最...
3. **处理Spider Traps**:爬虫陷阱是指网站设计用来捕获爬虫的机制,如动态URL、无限循环链接等。应对策略包括: - 对于动态URL,可尝试识别并统一处理。 - 遇到循环链接时,设定循环检测阈值,超过阈值则停止...
同样,在例2中,`isset()` 和连接符 `.` 的优先级关系导致了一个未定义索引的错误。理解这些优先级对于避免运行时错误至关重要。 2. **大小写敏感性**: PHP中函数名和类名是不区分大小写的,但变量名是区分大小写...
总的来说,"投票调查功能的ASP例"涉及了ASP基础、数据库操作、用户交互以及Web开发的多个方面,是学习ASP动态网站开发的一个典型应用场景。通过这个实例,开发者可以深入理解如何在实际项目中运用ASP技术,构建功能...
- **conn.asp**:另一个数据库连接文件,可能与dbconn.asp类似,但可能有不同的配置或用途。 - **bbs_admin.asp**:可能是BBS的后台管理页面,供管理员进行用户管理、版块设置等操作。 4. **ASP .NET编程基础**:...
这个压缩包提供的是一个以ASP技术构建的茶叶公司网站的实例开发源码,结合了古典风格的设计和实际的功能,旨在帮助学习者理解如何用ASP来创建一个具有商业价值的网站。 该网站实例主要包含以下几个方面的知识点: ...
在ASP.NET中,当尝试在页面上输出数组内容时,确保正确地访问和遍历数组元素,例如`$n[0].foodImage`代表访问数组的第一个元素的`foodImage`属性。 3. **Oracle DML操作与提交**: 在DOS中执行DML操作(INSERT, ...
PHP是免费的,而且拥有一个活跃的社区,这使得开发者能够获取丰富的资源和支持。 这个“PHP中文参考手册”是一个非常实用的工具,对于学习和精通PHP编程至关重要。CHM(Compiled Help Manual)格式是一种由微软开发...
2. **丰富的内置函数库**:PHP拥有大量的内置函数,涵盖字符串处理、数组操作、文件系统交互、网络编程等多个方面。 3. **数据库支持**:PHP与MySQL等数据库系统有很好的兼容性,方便进行数据库驱动的Web应用开发。 ...