zoukankan      html  css  js  c++  java
  • session的部分理解

    1.session是什么 
    首先引入度神的解释:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。

    博主俗人的理解: 服务器端为了保存某些数据,或实现某些必要的功能,当用户访问服务器时,将数据临时保存在服务器端以供完成服务器端的其他某些功能。服务器需要保存的数据可以以cookie的方式存储在客户端,而session的功能就是将服务器需要保存的数据存储在服务端。例如账号登录记录的功能,可以以session的方式将登录状态保存在服务器端,这样当用户访问其他程序时,需要用到登录的地方,都可以从该用户的session中取出该用户的数据,为用户服务。

    2.session和cookie的区别

    cookie是将用户的数据写给客户端(浏览器) 
    session是把用户数据写到服务器中用户独占的session里

    3.session的原理

    session的底层是基于cookie技术来实现的,当用户打开浏览器,去访问服务器的时候,服务器会为每个用户的浏览器创建一个会话对象(session对象),并且为每个session对象创建一个Jsessionid号。当session对象创建成功后,会以cookie的方式将这个Jsessionid号回写给浏览器,当用户再次进行访问服务器时,及带了具有Jsessionid号的cookie数据来一起访问服务器,服务器通过不同session的 Jsessionid号来找出与其相关联的session对象,通过不同的session对象来为不同的用户服务。

    原理图


    4.session的使用方法

    Demo1:将name保存到session里再将name从session里面取出来

    Servlet1

            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            HttpSession httpSession=request.getSession();
            httpSession.setAttribute("name","zhangsan");
            response.getWriter().write("已经将名字保存在session中");
    • 1
    • 2
    • 3
    • 4
    • 5

    Servlet2

            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            HttpSession httpSession=request.getSession(false);
            String name=(String) httpSession.getAttribute("name");
            response.getWriter().write("sesson的值为"+name);
    • 1
    • 2
    • 3
    • 4
    • 5

    Demo2:由于session的生效期为一个会话(及关闭浏览器就无法获得name值),但前面说了,session的内部原理为回写jsessionid号作为标识,则我们可以覆盖回写cookie的操作,设置cookie的有效期,同时也改变了session有效期(最大半小时),这样即使关闭浏览器,再次打开浏览器也能获取到name值。

    Servlet1

            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            HttpSession httpSession=request.getSession();
    
            String jsessionid=httpSession.getId();
            Cookie cookie=new Cookie("JSESSIONID",jsessionid);
            cookie.setPath("/Learn1");
            cookie.setMaxAge(30*60);
            response.addCookie(cookie);
    
    
            httpSession.setAttribute("name","zhangsan");
            response.getWriter().write("已经将名字保存在session中");
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Servlet2

            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            HttpSession httpSession=request.getSession(false);
            String name=(String) httpSession.getAttribute("name");
            response.getWriter().write("sesson的值为"+name);
    • 1
    • 2
    • 3
    • 4
    • 5

    Demo3: 由于有些用户浏览器可能禁止cookie的使用,导致我们的session失效了,我们面对这种情况可以采取url重写的方式,及在每个超链接背后接入jsessionid.(此种方法关闭会话浏览器后无效)

    5.session使用需注意的细节

    1. 在internet explorer7之前,打开一个浏览器为一个会话,session的作用域为一个浏览器。但目前浏览器版本,即使打开两个浏览器,他们共享session对象。
    2. 一个浏览器的多个选项卡,共享一个session对象。
    3. session的有效期最大为半个小时,及客户端半小时内无任何操作,服务器将会把该session对象摧毁。
    4. session的回写cookie的ID名字为:JSESSIONID

     


    版权声明:转载自 https://blog.csdn.net/yuehenhn/article/details/51457625
  • 相关阅读:
    easyExcel入门
    UML-从需求到设计--迭代进化
    UML-操作契约总结
    102. Binary Tree Level Order Traversal
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    84. Largest Rectangle in Histogram
    92. Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/thevilewind/p/8647516.html
Copyright © 2011-2022 走看看