Cookie的内容主要包括:名字,值,过期时间,路径和域
关于各个属性的使用:
1.domain表示的是cookie所在的域,默认为请求的地址:址为www.test.com/test/test.aspx,那么domain 默认为www.test.com。而跨域访问,如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个令域A和域B都能访问 的cookie就要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该 cookie的domain设置为t2.test.com。
2.path表示cookie所在的目录,PHP默认为/,就是根目录。在同一个服务器上有目录如下:/test/,/test/cd/, /test/dd/,现设一个cookie1的path为/test/,cookie2的path为/test/cd/,那么test下的所有页面都可以 访问到cookie1,而/test/和/test/dd/的子页面不能访问cookie2。这是因为cookie能让其path路径下的页面访问。
3.浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。
4.含值键值对的cookie:以前一直用的是nam=value单键值对的cookie,含多个子键 值对的cookie格式是name=key1=value1&key2=value2。可以理解为单键值对的值保存一个自定义的多键值字符串,其 中的键值对分割符为&,当然可以自定义一个分隔符.
5.secure – 安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。
这个属性的值或者是“secure”。缺省情况下,使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。设置了secure保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。
6.Expires – 过期时间。指cookie的生命期,确切地说是过期日期。
如果想让cookie的存在期限超过当前浏览器的会话时间,就必须使用这个属性。当过了到期日期时,浏览器会自动删除cookie文件。
浏览器一般只允许存放300个cookie,每个站点最多存放20个cookie,每个cookie的大小限制为4KB
问题:A、B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了。原因是使用了同名的cookie来存储验证码。
会话结束就会清除sessioncookie(关闭浏览器)。
它是存储在客户端硬盘中的txt文件:(可视化测试)
1. 打开C:\Users\Administrator\AppData\Local\Microsoft\Windows\TemporaryInternet Files: IE浏览器在本地磁盘中存储persistent cookie的地方
2.清除IE的所有cookie(ctrl + shift+ delete)
3.重新打开IE进入百度首页,F12键开启开发工具,在开发工具的菜单栏中选择 缓存 ->查看cookie信息。有关于百度的cookie详细信息。将它和C盘中的cookie对比。
可以看出第一个是persistent cookie.其余为会话cookie.关闭浏览器session cookie会自动删除。Persistent session要设置expires来确定cookie过期的日期
session是以散列表的方式存在(具体的存储形式可能有数据库表、cache、临时文件、服务器端cookie等形式),但在session这个散列表中有一个字段类似于sessionid的东西,是用来记录对应的客户端的,每一个客户端发来请求服务器都会在session中检测该客户端是否携带了sessionid,如果有,表示该客户端与服务器曾经发生过关系。没有,则会为其建立一个sessionid(这个建立的规则我还不清楚),不过这个sessionid会在客户端这次请求完之后带回去,保存。下一次该客户端再来请求,请求中自然就携带了该sessionid。就可以取得session中保存的信息。
Session实现机制:
Session的实现与cookie有关。上述所说的在客户端再一次发起会话的时候会传递sessionid过去,那么在客户端这个sessionId就存在cookie中。很多情况下你所看见的名为jsseionid的cookie就是它.(这个传递过程是浏览器来处理,不需要开发人员自己动手) 。因此当我们完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用
Cookie是存储在客户端浏览器内存中,而session(会话)是存储在服务器端内存(持久性的session存储在磁盘)。
一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用<%@pagesession="false"%>关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session =HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。
由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。
session在下列情况下被删除:
a) 程序调用HttpSession.invalidate();
b) 距离上一次收到客户端发送的session id时间间隔超过了session的超时设置
c) 服务器进程被停止(非持久session,保存在内存中)
它并不会在浏览器关闭时删除,必须满足以上情况才会删除