Session对象及其方法

Session:

    1.概念:服务器端会话技术,一次会话的多次请求间共享数据,将数据保存在服务器端的HttpSession对象中
    2.基本方法
        1.获取HttpSession对象
            HttpSession session = request.getSession();
        2.使用HttpSession对象
            Object getAttribute(String name)
            void setAttribute(String name, Object value)
            void removeAttribute(String name)
    3.基本原理:
        Session的实现依赖于Cookie
        步骤:
            1.服务器端第一次获取HttpSession对象,没有
                cookie,会在内存中创建一个新的HttpSession对象,
                并且会产生一个唯一的SessionID,通过set-cookie响应头
                返回该SessionID
            2.再次访问服务器端,通过请求头的cookie,携带SessionID到
                服务器端,并且按照该SessionID查找内存中是否有一个
                该id的HttpSession对象,如果有,则getSession()将该对象
                返回给HttpSession引用,就获取到了该对象
            注意:所以获取的session是同一个
    4.细节:
        1.当客户端关闭后,服务器不关闭,两次获取session是同一个吗
            不是,因为当客户端关闭后,客户端中cookie中的JSESSIONID会消失,
                打开浏览器后,再次请求服务器时候,不会携带JSESSIONID的cookie,
                也就找不到服务器中的那个session对象了
            如果需要在关闭浏览器后,仍可以获取同一个session,需要设置JSESSIONID以及最大存活时间(持久化)
                Cookie jsessionid = new Cookie("JSESSIONID", session.getId());
                jsessionid.setMaxAge(60*60);
                response.addCookie(jsessionid);
        2.客户端不关闭,服务器关闭后,两次获取session是同一个吗
            不是,服务器关闭后,内存中的session对象会被销毁
                为了服务器session中数据不丢失:
                    session的钝化:
                        在服务器正常关闭后,将获取的session对象序列化到硬盘上
                    session的活化:
                        在服务器启动后,将session文件转化为内存中的session对象
                注意:部署项目时,用本地tomcat,因为它会自动进行session对象的序列化和反序列化
        3.session什么时候被销毁
            1.服务器非正常关闭(正常关闭会被序列化)
            2.session对象调用invalidate()
            3.session默认失效时间30分钟
                选择性配置
                    在tomcat的apache-tomcat-8.5.31\conf下的web.xml中设置
                        <session-config>
                            <session-timeout>设置存活时间(分钟)</session-timeout>
                        </session-config>
    5.session的特点:
        1.session用于存储一次会话的多次请求的数据,存在服务器
        2.session可以存储任意类型,任意大小的数据
        session与cookie的区别
            1.session存储数据在服务器端,cookie在客户端
            2.session没有数据大小限制,cookie有限制4kb
            3.session数据安全,cookie相对不安全
上一篇:如何在java中创建登录和注销会话


下一篇:服务端会话技术--Session