• 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.  
      1、web.xml 文件
    2.  
       
    3.  
      <session-config>
    4.  
      <session-timeout>30</session-timeout>
    5.  
      </session-config>
    6.  
       
    7.  
       
    8.  
       
    9.  
      2、server.xml 文件
    10.  
       
    11.  
      <Context path="/demo" docBase="/demo" defaultSessionTimeOut="3600"
    12.  
      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 的钝化(从内存持久化到文件) 和 活化(从文件读到内存),提高性能。
  • 相关阅读:
    WPF操作ini 文件的读写示例
    WPF调用图片路径,或资源图片
    WPF笔记一
    WPF 获取程序路径的一些方法,根据程序路径获取程序集信息
    10进制转62进制,实现穷举指定位数的所有密码组合(暴力破解)
    匿名对象和object的转换
    构造函数和:this()的应用
    WPF TextBox自动滚动到最户一行
    C#接口的使用场合,接口应用
    读匿名object对象的属性值
  • 原文地址:https://www.cnblogs.com/coder-ahao/p/14225691.html
Copyright © 2020-2023  润新知