美文网首页
17.Session

17.Session

作者: 若愚同学 | 来源:发表于2018-06-19 22:55 被阅读0次

    Session底层依然是Cookie.浏览器关闭就失效(会话Cookie).

    Session:

    是一种服务端技术,把共享数据保存在服务端,解决会话跟踪

    每一个请求如何从服务端寻找共享数据:

    服务端先分配一个Session的存储ID地址(jsessionid)给浏览器.浏览器每次请求的时候,都会带着jsessionid的值,再从该jsessionid的内存空间中去取数据.

    生活中的实例:

    客户           服务端(健身房老板)
    第一次         办卡,卡号为123456,把卡号给客户
    非第一次       123456,我再去查询id为123456的空间(数据)
    

    Session的操作:

    1):获取Session对象/创建Session对象.
    HttpSession  session = request对象.getSession();等同于getSession(true);
    HttpSession  session = request对象.getSession(true);:如果当前有Session对象,就直接返回,若没有,则先创建一个再返回.
    HttpSession  session = request对象.getSession(false);:如果当前有Session对象,就直接返回,若没有,则返回null.
    
    2):把共享数据存储在Session中.
    Session对象.setAttribute(String name,Object value);
    session.setAttribute("currentNae","will");
    
    3):从Session中获取共享数据:
    Object  val = session.getAttribute("currentName");
    
    4):修改Session中的共享数据.
    重新设置一个同名的属性名
    session.setAttribute("currentName","Lucy");
    
    5):删除Session中的共享数据.
    从Session中删除指定名的属性值.
    session.removeAttribute("cuurentName");
    
    6):Session的拓展:

    1):一般,根据我们队大师的研究,发现session中的属性名,习惯起名为:XXX_IN_SESSION.

    2):把登陆信息封装在一个对象中,再存储到Session中.

    User user  = new User("will",.....);
    session.setAttribute("USER_IN_SESSION",user);
    

    3):一般的我们习惯把放入Session的对象,让它实现序列号接口(java.io.Serializable).

    原因:
    当多台服务集群的时候,彼此之间可以共享Session数据(在网络上传输数据).
    
    序 列 化:
    把对象转换为二进制数据.(对象流)
    
    反序列化:
    把二进制数据恢复成对象.(对象流)
    
    7):销毁Session对象(注销登录):
    session.removeAttribute("USER_IN_SESSION")方法,只能删除Session中指定名称的属性.
    
    session.invalidate():销毁整个Sssion对象.
    
    8):Session的超时管理.
    session.setMaxInactiveInterval(int seconds);
       
    session.setMaxInactiveInterval(15);
    

    若上一次操作之后,15秒内不再次和该网页交互,则Session会被自动销毁.
    两次操作的间隔时间不能超过15秒,若超过自动销毁Session.

    一般的,不需要我们去设置,在Tomcat中,默认的超时时间为30分钟(一般在20分钟就被销毁了).

    <session-config>
        <session-timeout>30<session-timeout>
    </session-config>
    
    
    9):当Cookie被禁用之后,URL重写问题.
    方式一:将jsessionid直接拼接到url后面

    /session/list;jsessionid=1067B32F8F96EB10871A7E103F22811B

    方式二:使用URL重写,自动的根据浏器是否禁用Cookie来拼接jsessionid
    String url = resp.encodeURL("/session/list");
    out.print("<a href='" +url +"'>收件箱(4)</a><br/>");
    

    相关文章

      网友评论

          本文标题:17.Session

          本文链接:https://www.haomeiwen.com/subject/mpnzeftx.html