zoukankan      html  css  js  c++  java
  • Head First Servlets & JSP 学习笔记 第六章 —— 会话状态

    MVC中的M(模型),通常就是一个普通的类,这个类里面的信息就是业务逻辑。

    会话(Session)

    我们可以使用一个HttpSession对象,来保存横跨多个请求的会话状态。

    HTTP协议使用的是无状态连接。客户浏览器与服务器建立连接,发出请求,得到响应,然后关闭连接。换句话说,连接只为一个请求/响应存在。对于Web容器而言,每一个连接都是一个新的客户。

    那么Web容器怎么记住这是同一个客户,还是另外一个新客户呢?这个时候,客户就需要一个唯一的会话ID。

    对于一个客户的第一个请求,容器会生成一个唯一的会话ID,并通过响应把它返回给客户。这个客户在以后的每一个请求中再把会话ID发到Web容器,这样,Web容器就可以区分不同的客户了。

    那么又有一个问题:客户和Web容器怎么交换会话ID这个信息呢?答案就是:通过cookie。

     1 HttpSession session1 = request.getSession(); //无参数版本的getSession(),无论如何都会返回一个会话,要么是新建的,要么是之前就有的
     2 if(session1.isNew()){
     3     syso("这是一个新创建的会话");
     4 else
     5     syso("这是一个已有的会话");
     6 
     7 HttpSession session2 = request.getSession(false); //有参数版本的getSession(),返回null或者一个之前就有的会话
     8 if(null == session2)
     9     syso("这个会话不存在“);
    10 else
    11     syso("这是一个已有的会话");

    那么又有一个问题:有些客户会禁用cookie,这怎么办?答案就是:URL重写。

    也就是说,为了能识别是同一个客户还是新客户,需要交换会话ID,最简单的交换办法是用cookie,不行再用URL重写

    删除不再需要的会话?会话对象占用着资源,Web容器怎么确定这个会话要不要删除?

    会话有三种死法:①超时 ②主动调用invalidate()方法 ③应用结束

    cookie实际上就是在客户和服务器之间交换的一小段数据(一个名/值对)。

    1 Cookie cookie = new Cookie("username", "2bconfident"); //创建一个新的cookie对象
    2 cookie.setMaxAge(30*60); //设置cookie在浏览器上存活的最大时间:30分钟

    HttpSession的重要里程碑,一生中的重要时刻:创建和撤销会话。

    前面的章节,我们知道在分布式应用上,有多个服务器,也就有多个JVM。一个JVM有一个ServletContext,一个JVM有多个Servlet,所以有多个ServletConfig,一个Servlet对应一个ServletConfig。

    但是HttpSession对象,无论有多少JVM,一个应用中只有一个HttpSession对象,只有一个SessionID(会话ID)。

  • 相关阅读:
    JavaScript cookie详解
    Javascript数组的排序:sort()方法和reverse()方法
    javascript中write( ) 和 writeln( )的区别
    div做表格
    JS 盒模型 scrollLeft, scrollWidth, clientWidth, offsetWidth 详解
    Job for phpfpm.service failed because the control process exited with error code. See "systemctl status phpfpm.service" and "journalctl xe" for details.
    orm查询存在价格为空问题
    利用救援模式破解系统密码
    SSH服务拒绝了密码
    C# 调用 C++ DLL 中的委托,引发“对XXX::Invoke类型的已垃圾回收委托进行了回调”错误的解决办法
  • 原文地址:https://www.cnblogs.com/czp2bconfident/p/8892314.html
Copyright © 2011-2022 走看看