cookie的创建和session的生命周期等 [转载]
Posted 霜序0.2℃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie的创建和session的生命周期等 [转载]相关的知识,希望对你有一定的参考价值。
原文链接:https://blog.csdn.net/u012997186/article/details/84519148
原文没法显示图片,把图片弄了回来然后转载了
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中有如下配置:
30其中的30表示30分钟, 我们想给自己的项目配置session的生命周期, 可以在自己项目中的web.xml中也进行上述配置即可,如改为60分钟:
60这个30分钟是指一共就存活30分钟, 还是说距最后一次访问30分钟?
网上两种说法有争议, 不如自己测一下, 将session过期时间设为1分钟,利于测试.
结果是距最后一次访问30分钟而不是一共30分钟,测试过程:
1, 将session生命周期设为1分钟后, 启动项目, 登录后隔5秒钟就刷新一次页面,一直持续了2分钟还是处于登录状态, 说明session还在
2, 停止刷新, 静置1分钟, 再次刷新, 已经不是登录状态, 说明session已经丢失
以上是关于cookie的创建和session的生命周期等 [转载]的主要内容,如果未能解决你的问题,请参考以下文章