cookie的创建和session的生命周期等

Cookie简介
Cookie是键值对, 由服务器端生成写到浏览器端, java中创建cookie并写回cookie的代码如下:
	Cookie c = new Cookie("cookie--key", "cookie—value");
	c.setMaxAge(3600);//表示3600秒
	c.setDomain("localhost");//设置cookie的域,域与当前项目的域不一样是不能写回到浏览器的,一般不用设置,默认就是当前项目的域名
	c.setPath("/");//路径,/表示根目录,默认是"/项目名"
	response.addCookie(c);//添加cookie到response中
	response.sendRedirect(request.getContextPath()+"/index.jsp");



浏览器端收到上述cookie如下:

因为设置了maxAge为3600秒即1小时,因此其过期时间显示为2013年12月31日 11:46:33, 而我当前时间为2013年12月31日 10:46:33, 正好延迟3600秒即1小时.






一, Cookie的生命周期
如果没有设置maxAge, 默认是当前会话结束时.
如果设置了maxAge, 则直到设定时间.

什么叫会话结束?
就是浏览器关闭时, 关闭浏览器上的tab页不算会话结束.

二, cookie 什么时候产生
访问html不产生cookie
访问jsp , servlet产生cookie , 如下是访问了一个空的test.jsp产生的cookie:



这个cookie不是程序员创建的, 而是服务器自动创建的, 包含的信息就是就jsessionid, 域和路径都是默认的, 过期时间是会话结束.


提问: 当你登录网站后, 然后关闭浏览器, 再重新进入该网站还是登录状态吗?
不是, 但有的网站确实不需要登录啊?这是因为在登录时, 程序员给你的cookie做了处理

怎样处理后才能保持登录状态呢?
每次访问(除访问html)服务器就会自动创建一个名为JSESSIONID, 值为JSESSIONID值的cookie写到浏览器端, 而这个cookie的过期时间是会话结束时, 所以只要改变这个cookie的过期时间就可以达到第二次进入还是登录状态, 代码如下:
        Cookie c = new Cookie("JSESSIONID",request.getSession().getId());
	c.setMaxAge(3600);//表示3600秒
	c.setPath("/");//路径,/表示根目录,默认是"/项目名"
	response.addCookie(c);//添加cookie到response中
        response.sendRedirect(request.getContextPath()+"/index.jsp");



浏览器端接收到cookie如下:



这时有了两个都叫JSESSIONID的cookie, 图中被选中的cookie的过期时间是2013年12月31日 12:02:35, 我当前时间是2013年12月31日 11:02:35, 因此在一个小时内, 不管我关不关闭浏览器, 再次进入该网站,一直都是登录状态(前提是服务器端的session过期时间大于1小时), 上面那个JSESSIONID的cookie是服务器自动产生的,过期时间是会话结束时







三, Session的生命周期
Tomcat中默认是30分钟, 在tomcat的conf/web.xml中有如下配置:
<session-config>
        <session-timeout>30</session-timeout>
</session-config>


其中的30表示30分钟, 我们想给自己的项目配置session的生命周期, 可以在自己项目中的web.xml中也进行上述配置即可,如改为60分钟:
<session-config>
        <session-timeout>60</session-timeout>
</session-config>



这个30分钟是指一共就存活30分钟, 还是说距最后一次访问30分钟?
网上两种说法有争议, 不如自己测一下, 将session过期时间设为1分钟,利于测试.
结果是距最后一次访问30分钟而不是一共30分钟,测试过程:
1, 将session生命周期设为1分钟后, 启动项目, 登录后隔5秒钟就刷新一次页面,一直持续了2分钟还是处于登录状态, 说明session还在
2, 停止刷新, 静置1分钟, 再次刷新, 已经不是登录状态, 说明session已经丢失

猜你喜欢

转载自18810098265.iteye.com/blog/2002428