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)时,服务器会自动创建 session,并把 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 的钝化(从内存持久化到文件) 和 活化(从文件读到内存),提高性能。

给TA打赏
共{{data.count}}人
人已打赏
Java

写一些常见的Javascript正则表达式?

2020-7-31 1:45:00

Java

servlet的生命周期

2020-7-31 1:48:20

本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策。若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
⚠️
本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策
若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索