Cookie-Session机制

Posted alpharun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie-Session机制相关的知识,希望对你有一定的参考价值。

1.什么是Session

HTTP协议本身是无状态的,浏览器的每一次请求都是独立的,浏览器不会保存过去的请求信息。服务器为了记录用户的状态就需要使用某种机制来保持会话,在Http传输中采用了Session机制。
Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。在Servlet中,session指的是HttpSession类的对象。

 

2.如何维持会话


服务器创建Session后,会把Session的id号,以cookie的形式回写给浏览器,以后在访问符合cookie规则的页面时,浏览器会把这个cookie添加到请求头发送给服务器,服务器接收到这个cookie时会匹配id号找到当前浏览器的会话。 ID通常是 NAME 为 JSESIONID 的一个 Cookie。

  • HTTP和COOKIE交互:
    服务器端响应给客户端对应的Set-Cookie。包括了对应的cookie的名称,值,以及各个属性。
 

3.Servlet中的HttpSession


  • Session创建的时间:
    一个常见的误解是以为Session在有客户端访问时就被创建,然而事实是直到某servlet端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,JSP会默认调用,如果不打算使用session,应该在所有的JSP中关闭它。

  • Session删除的时间:

    • Session超时:超时指的是连续一定时间服务器没有收到该Session所对应客户端的请求,并且这个时间超过了服务器设置的Session超时的最大时间。
    • 程序调用HttpSession.invalidate()
    • 服务器关闭或服务停止
  • Session会因为浏览器的关闭而删除吗?
    不会,session只会通过上面提到的方式去关闭。

  • Session存放在哪里:
    服务器端的内存中。不过session可以通过特殊的方式做持久化管理,比如写入数据库或文件中

  • Session是一个容器,可以存放会话过程中的任何对象。

  • Session的创建和使用总在服务端,而浏览器从来都没得到过session对象。但浏览器可以请求Servlet来获取session的信息。客户端浏览器仅仅拿到的是sessionID。

 

4.URL地址重写维持会话


URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写。
该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

 







以上是关于Cookie-Session机制的主要内容,如果未能解决你的问题,请参考以下文章

为啥除了 passport.js 还要使用 cookie-session?

cookie-session

如何使用 cookie-session 和 passport.js 在注册时启动会话?

Django框架的使用教程--Cookie-Session[五]

Node.js | 详解 Cookie-Session登录验证 的工作原理

Shiro+JWT 实现权限管理--JWT