javaWeb中的session

什么是sesson?

服务器会为每个浏览器 创建单独Session对象,Session对象用来保存与对应浏览器相关会话数据 

session和cookie的区别?

Session和Cookie 相比,Cookie 数据保存客户端,Session数据保存服务器端
Cookie 好处:保存客户端,不占用服务器资源 (记住用户名密码、上次访问时间 、商品浏览记录 ...) 缺点:安全性
Session 好处:数据保存服务器端,更加安全 ,缺点:占用服务器资源,当Session数据非常多时,服务器压力非常大

Session原理

1、当客户端访问服务器,第一次 request.getSession() API得到执行,随机创建Session对象,为对象创建唯一编号 id
2、服务器会将创建Session 的编号 id 以Cookie形式 发送给客户端
3、客户端接收 session的编号,保存起来(会话级别、持久级别)
4、客户端下次访问服务器,因为cookie中含有session的id ,会自动携带session的id
5、服务器端,从cookie中获得session的id,并且request.getSession()时,根据session的id查找到服务器端对应Session对象

关闭浏览器再打开,Session中数据还在不在?

cookie持久的,获得之前session的id ---- 找到相应信息
cookie是会话级别,关闭浏览器后丢掉 session的id ,服务器端session数据还在,但是找不到信息
***浏览器关闭 与Session存在无关 ,关闭浏览器只是丢失保存在cookie中 session的id

*** 手动设置jsessionid持久化
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60);
cookie.setPath("/day7");
response.addCookie(cookie);

Session生命周期 :
1、创建 :request.getSession() (没有jsessionid找不到对应Session)
2、失效 :
(1) 服务器正常关闭,重启后,session数据还有,中止服务器,启动,session数据丢失
** 正常关闭服务器,session中数据会被序列化到 tomcat/work 目录,重启后重新加载
(2) 自动过期 ,当session持续一段时间没有使用,服务器就会自动删除session对象
tomcat/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
默认session过期时间 30分钟

API 进行设置 session.setMaxInactiveInterval(int interval) 单位秒

(3) 手动销毁session ---- session.invalidate() 销毁当前session对象,清除里面所有数据

禁用cookie?

如果客户端禁用cookie,会怎么样 ?服务器Session对象还是存在的 ,客户端无法找到Session
*** cookie 禁用解决 ,在url地址上 拼接jsessionid
http://localhost/day7/session/cart.jsp;jsessionid=5509175E258A27EBAA3BF972E5D309EF (分号 ; 不是 ?)

使用response 提供现成API : encodeURL
*** 禁用cookie 使用所有url 必须都进行重写,只要有一个没重写,session丢失 ,无法获得丢失session的数据

猜你喜欢

转载自www.cnblogs.com/zhuangwf/p/10807262.html