HTTP Session 理解

HTTP Session

Session表示服务器与客户端的一次会话,它可以是连续的也可以是不连续的,是一种服务器端的机制。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识- 称为sessionID,如果已包含一个sessionID则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionID,则为此客户端创建一个sessionID并且生成一个与此session相关联的sessionID。sessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionID将被在本次响应中返回给客户端保存。保存sessionID的方式可以采用cookie,从而在交互过程中浏览器可以自动地按照规则把这个标识发送给服务器。


  • Session创建时间

    在打开浏览器第一次发送请求的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。客户端再次请求服务器中其他资源的时候,会自动在请求头Request Header上添加:Cookie: JSESSIONID=客户端第一次拿到的session ID,服务器接收到请求后,会在内存中根据该JSESSIONID寻找上次使用的session对象。

  • Session删除时间

  1. Session超时:通过session.setMaxInactiveInterval()(单位为s)修改;
  2. 服务器关闭或停止服务;
  3. 程序调用HttpSession.invalidate()使Session失效。
  • Session存储

    一般情况下,session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空,如果设置了session的持久化特性,服务器就会把session保存到硬盘上,当服务器进程重新启动时这些信息将能够被再次使用。持久化方式包括文件、数据库、客户端cookie保存和复制。

  • Session与Cookie的区别

  1. session 在服务器端,cookie 在客户端(浏览器)
  2. session 默认被存在在服务器的一个文件里(不是内存)
  3. session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
  4. session 可以放在 文件、数据库、或内存中都可以
  5. 用户验证等场合一般会用session
  • 总结

    session的创建和使用总在服务端,而浏览器其实从来都没得到过session对象。但浏览器可以通过请求服务器来获取session的信息。客户端浏览器真正紧紧拿到的是session ID,而这个对于浏览器操作的人来说,是不可见的,并且用户也无需关心自己处于哪个会话过程中。

猜你喜欢

转载自www.cnblogs.com/Winkelzyx/p/12291555.html