Session的工作原理

参考答案

1.  什么是Session

Session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。

服务器默认为浏览器在Cookie中设置sessionid,浏览器在向服务器请求过程中传输Cookie包含sessionid ,服务器根据 sessionid 获取出会话中存储的信息。由于http协议是无状态的,即http请求一次连接一次,数据传输完毕,连接就断开了,下次访问需要重新连接。

通过Cookie中的sessionid 字段和服务器端的Session关联,可以确定会话的身份信息。

 

2.  Session 比 Cookie 更安全

用户信息可以通过加密存储到Cookie,但是这样做的安全性很差,浏览器的Cookie的容易被其他程序获取和篡改。使用Session 的意义在于Session存储在服务器,相对安全性更高。

3.  Session的生命周期

  • 创建

浏览器访问服务器的servlet(jsp)时,服务器会自动创建Aession,并把sessionid 通过Cookie 返回到浏览器。

servlet 规范中,通过request.getSession(true) 可以强制创建Session。

 

  • 销毁

服务器会默认给Session一个过期时间,即从该Session的会话在有效时间内没有再被访问就会被设置过超时,需要重新建立会话。

如tomcat的默认会话超时时间为30分钟。

会话超时时间是可以通过配置文件设置,如修改 web.xml 、server.xml 文件:

1、web.xml 文件
 
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
 
 
 
2、server.xml 文件
 
<Context path="/demo" docBase="/demo" defaultSessionTimeOut="3600" 
isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>

调用 servlet api 手动设置 session 超时时间:

request.getSession().setMaxInactiveInterval(60 * 30);//session 30分钟失效

调用servlet api手动销毁Session:

request.getSession().invalidate();

4、注意事项

  • 如果浏览器禁用Cookie,默认情况下Session 无法生效,可通过URL重载携带 sessionid 参数、把sessionid设置为http协议 header 设为其他自定义字段中,请求中始终携带。
  • 当用户量很大、Session 的失效时间很长,需要注意Session 的查找和存储对服务器性能的影响。
  • web 容器可以设置Session 的钝化(从内存持久化到文件) 和 活化(从文件读到内存),提高性能。

 

以上,是WEB面试题【Session的工作原理】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧