Session与Cookie详解
2018-10-29 15:31:51来源:博客园 阅读 ()
1. 什么是会话 会话的目的
https://www.cnblogs.com/teeva/p/4474602.html
1.1会话:客户端向浏览器发送一个连接请求开始,客户端明确会话结束或者服务器在预设的一段时间内没有收到连接请求会话结束
1.2会话技术的目的:HTTP是一个无连接的协议,但在会话过程中想要保存在会话过程中生成的一些信息。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
2.session技术的原理及实现
2.1 session原理
当浏览器发送第一次发送请求的时候,服务器收到请求会自动生成一个Sesion ID,并开辟一个Session域,并会响应浏览器,以Cookie的方式写入到浏览器中。当再次发送请求时,浏览器会把这个会把这个Sessio ID 发送给Servlet,Servlet根据Session ID找到相应的Session域,在这个Session域中取出数据。
抓包查看
第一次请求SessionServlet(内容为HttpSession session = request.getSession();)
第二次请求SessionServlet(内容为HttpSession session = request.getSession();)
请求SessonSevlet2(Servlet的内容空白只做测试用,因为是在同路径下,依然带有Session)
----------------------------------------------------------------------------------------------------------------------------
2.2Session的实现
建立
HttpSession session = request.getSession();//如果这次请求有对应的Session就返回那个Session,没有的话就新建一个Session,并将Session发送给客户端
存储信息(与其他域对象一样的三个函数)
session.setAttribute(String name,Object obj);
session.setAttribute(String name,Object obj);
session.setAttribute(String name,Object obj);
Session的生命周期
创建
1.第一次执行request.getSession()时创建
销毁
1.session过期/失效(默认30分钟):是从最后一次操作结束时计时
web.xml中的 <session-config> <session-timeout>10</session-timeout> </session-config> 可以设置单前工程的session的持久化时间 也可以在Server.xml修改相关的信息,设置全局的session持久化时间
2.调用session.invadate()
3.服务器关闭时
注意:浏览器关闭,session就销毁,这句话是不正确的
虽然浏览器关闭之后,再次与相同的地址建立请求,会新建一个Session,但是并不代表是服务器端的Session被销毁了。原因是Session ID是以Cookie的形式在浏览器中存储了,Cookie的默认存在时间是一次会话的范围,浏览器一旦关闭Cookie信息就被清除了,所以在发送链接请求的时候就不会发送对应的Session ID了。如果想解决上述问题就可以设置Cookie的持久化,代码如下:
Cookie cookie = new Cookie("JSESSIONID",session.getId()); cookie.setPath("/29-Cookie-Seesion");//设置cookie的路径范围,只有在请求相同路径内的资源时候,才会发送对应的cookie cookie.setMaxAge(60*2); response.addCookie(cookie);
---------------------------------------------------------------------------------------------------------------------------------------------
3.Cookie技术
有了前面session的铺垫,cookie就比较好理解了
3.1建立cookie
Cookie cookie = new Cookie(String cookieName,String cookieValue);//新建cookie cookie.setMaxAge(int seconds);//设置cookie的持久化时间,如果设置了Cookie的持久化时间,cookie就会被存储在磁盘里,注意要写在add之前 cookie.setPath("/29-Cookie-Seesion");//设置cookie的路径范围,只有在请求相同路径内的资源时候,才会发送对应的cookie response.addCookie(cookie);//会以响应形式发送给浏览器
3.2删除cookie
新建一个同名cookie,将持久化时间设置为0即可
3.3获取浏览器端的 cookie
Cookie[] cookies = request.getCookies(); if(cookies != null) { //取出每一个cookies for (Cookie cookie : cookies) { //判断名字是否是自己的 String name = cookie.getName(); if(name.equals("lk")) { response.getWriter().write("lk = value"+cookie.getValue()); } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 数据源管理 | Kafka集群环境搭建,消息存储机制详解 2020-06-11
- Java--Stream流详解 2020-06-10
- B树和B+树的插入、删除图文详解 2020-06-09
- Spring Boot 2.3 新特性优雅停机详解 2020-06-08
- 详解SpringBoot(2.3)应用制作Docker镜像(官方方案) 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash