• Session重点整理


    首先明确几个概念

    (1)JSessionID:通过tomcat运行的Java项目,为新用户生成的随机字符串.(应该是tomcat设置的,我没试过别的服务器,如有错误请指正)

    (2)Session请求(自创概念,方便下文)-指Cookie中不含JSessionId的请求.

     一.session的结构

    session的结构类似于hashmap

    Session请求访问网站时,服务器自动生成一个sessionid,并保存在名为JSessionId的cookie中,发送回客户端.

    这个sessionid就相当于session的一个key

    二.session的生命周期

    参考:http://blog.csdn.net/u012635819/article/details/50678602

    1.session何时创建

    常见的错误是以为session在有客户端访问时就被创建,然而事实是直到某server端程序(如Servlet)调用
    HttpServletRequest.getSession(true)这样的语句时才会被创建。 

    如果你写个简单的demo,根本没用到getSession(),那根本就不会创建session,即使cookie中有JSessionID,直到访问了getSession(),通过客户端的JSessionID创建Session.

    所以在未创建session时,如果Session请求访问的页面中有session.getSession(false).getAttribute,直接报NULL错误.

    用Spring的WebUtil或者在Filter中用getSession()手动创建一个.

    2.session何时结束

    A.程序调用HttpSession.invalidate() 
    B.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间 
    C.服务器进程被停止 
    再次注意关闭浏览器只会使存储在客户端浏览器内存中的cookie的JsessionId失效,不会使服务器端的session对象失效。 

    但是此时服务器仍保留失效的JsessionId,直到过期前都是无用信息了.

     当然也可以监测浏览器关闭事件发送请求清除session,不过不确定在那毫秒之间能否发送成功,有资料,没试过.

  • 相关阅读:
    Netty ChannelHandler组件作用
    Netty Channel组件作用
    Netty NioEventLoop自定义任务处理
    NIO与BIO
    JDK ByteBuffer与Netty ByteBuf
    linux-源码软件管理-yum配置
    typora使用快捷键
    远程连接mysql库问题
    MVC 后台处理 json格式的日期
    使用 SqlClient 创建数据库连接并获取数据
  • 原文地址:https://www.cnblogs.com/ptqueen/p/8351699.html
Copyright © 2020-2023  润新知