0%

Session原理及使用

一、Session原理

1576218262(1)

  1. 用户向服务器发送用户名和密码
  2. 服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色, 登陆时间等;
  3. 服务器向用户返回一个session_id, 写入用户的cookie
  4. 用户随后的每一次请求, 都会通过cookie, 将session_id传回服务器
  5. 服务端收到 session_id, 找到前期保存的数据, 由此得知用户的身份

二、Session一次会话存活时间

想象会员卡的例子,除非客户主动提出销卡,否则店家不会轻易删除顾客资料。对session而言,除非程序通知服务端删session,否则服务端会一直保留,程序一般会在用户“登出”(调用session.invalidate())时候删除这个session。然而浏览器从来不会主动在关闭之前通知服务器将session关闭。因此服务器根本不会有机会知道浏览器关闭了。

  • 大部分session是用会话cookie来保存session_id的。关闭浏览器,session_id消失,再次连接服务器找不到原来的session_id,所以又是一个新的会话。
  • 若cookie是基于硬盘的,那么这个会话在再次打开浏览器时,依然是原来的会话,即同一个会话。
    鉴于这种情况,服务端也不能永久保留这个会话,所以服务器会给这个session设置失效时间,来节省存储。

三、设置Session失效方式

  • 在/tomcat/conf/web.xml文件中设置,所有的web应用均有效
    ` 20 `
  • session.setMaxInactiveInterval(int var1);

四、cookie与session的区别

1576219619(1)
作用:Cookie是检查用户身上的标识来识别用户身份;Session是检查服务器上的”客户明细表”来确定用户身份

  • 存放位置:Cookie存储在浏览器中,对客户端可见,为了安全性,要加密;Session存储在服务器上,对客户端透明,不存在泄漏问题。
  • (从存放位置)对服务器负担:Session存放在服务端,每个用户都会有session_id。若服务器做均衡负载,下一次请求到了另一个服务器,又是新的请求;Cookie保存在客户端,不占服务端的资源
  • 存储类型:Cookie键值对只能是字符串,而Session可以是对象(可将其理解为容器)
  • 有效期:Cookie的存活时间是按累计的时间来计算的,不管用户有没有访问session;而Session设置成10s,代表10s内没访问,则失效,若第9s访问了,则重新计时
  • 有些状态不可能保存在客户端(Cookie),比如防止重复提交表单,要用到session。
  • 对浏览器支持:若浏览器禁用Cookie,则Cookie无用,而Session可以通过URL重写和表单隐藏字段进行会话跟踪。

    五、Session可以存放的位置

  • 一般情况下,会放在cookie中
  • 若浏览器的cookie被禁,则可以写在URL中:方式一:重写URL 方式二:表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session `id传递回服务器。
       

六、案例

  • Session实现购物功能
  • 使用Session完成用户简单登录
  • 防止表单重复提交 ①网络延迟,在当前页面重复提交。可在前端通过事件JSP控制 ②退回,再重复提交 在表单中隐藏session来控制
    1576224535(1)
    代码参考:https://segmentfault.com/a/1190000013130309