• #会话技术——Session


    Session

    1.什么是Session?
    服务器会话技术。当服务器运行的时候,会为各自的浏览器建立单独的session,当浏览器访问服务器时,服务器会将数据存储在各自的session中,当浏览器再次访问其他服务器,其他web资源再从用户各自的session中取出数据为用户服务.总而言之,将数据保存在服务器.
    2.Session的特点
        1.共享一次会话中多个请求的数据
        2.可以储存任意类型,任意大小的诗句
        3.数据存储在服务器中
    

    Session的原理

    ![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200428150829839-327489964.png)
    Session其本质就是一个会话Cookie(浏览器关闭后,Session就失效了)
    

    Session的操作

    1.获取Session对象
        request.getSession(true);获取Session对象,如果没有Session对象,直接创建一个新的返回,缺省值
        request.getSession(false):获取Session对象,如果没有返回null
        request.getSession(): 和参数为true的一样
    2.设置共享数据
        1.往Session中存储数据
            session.setAttribute(String name, Object value);
        2.从Session中取出数据
            Object value = session.getAttribute(String key);
    
    3.删除Session(用户注销登录)
        1.删除Session中指定属性名的值.
        session.removeAttribute(String name)
        2.销毁Session对象(Session中所有属性都不存在了)
        session.invalidate();
    4.Session的超时管理
        超时:在访问当前的资源的过程中,不和网页进行任何的交互,超过设定的时间就是超时.超时后就会销毁Session
            1.void session.setMaxInactiveInterval(int interval)
            在服务器中有默认的配置为30分钟,通常不需要去修改
    5.URL重写(在url后面拼接jsessionid,解决浏览器禁用Cookie)
        问题: 当浏览器禁用Cookie之后,那么我们的jsessionid就不能在浏览器中保存,那么后面的请求中就不会将jsessionid发送到服务器,服务器这面就找不到数据
        解决方案:
        1.在url后手动的拼接上jsessionid
        String jessionid = session.getId();
        out.println("<a href='/session/list;jsessionid="+jsessionid+"'>收件箱(5)</a>)
    

    细节

    1.客户端关闭,服务器不关闭,我们再获取Session的对象是同一个吗
        答:不是,如果想获取同一个,我们可以在接收时设置如下代码
        Cookie cookie =new Cookie("Jsessionid",session.getId());
        cookid.setMaxAge(60*60);
        respond.addCookie(cookie);
    2.服务器关闭,客户端不关闭,我们获取的Session对象是同一个吗
        答:不是,但数据不会被销毁
            *session的钝化:
                在服务器关闭之前,将session序列化在硬盘上
            *session的活化
                在服务器启动后,将session文件转化为session对象即可(反序列化)
    3.Session什么时候销毁
        1.服务器关闭
        2.session对象调用invalidate()
        3.session默认时长为30分钟
    4.一般的,我们存储到Session中的属性名称,要唯一,起名规范XXX_IN_SESSION
        session.setAttribute("USER_IN_SESSION","ZYGui");
    5.若需要把多个数据存放到Session中,就要调用setAttribute方法N次,一般将存储的数据封装成一个对象,然后存储到Session中.把用户的信息,封装到user对象.
        session.setAttribute(“USER_IN_SESSION”, user对象);
  • 相关阅读:
    Map容器家族(LinkedHashMap源码详解)
    树篇3-平衡二叉查找树之红黑树
    树篇2-平衡二叉查找树之AVL树
    树篇1-二叉查找树
    Map容器家族(HashMap源码详解)
    位运算符的基本使用和注意事项
    android中获取屏幕的信息
    获取activity的根视图
    初来咋到,请多指教
    linux死机解决办法
  • 原文地址:https://www.cnblogs.com/linjing111/p/12794689.html
Copyright © 2020-2023  润新知