Session

原创
10/14 21:34
阅读数 125

客户端向服务器发送请求,服务器接收请求并生成响应返回给客户端,客户端对服务器的这样一次连续的调用过程,称为会话(session)

注意:不同的浏览器,不同的版本,对会话的支持有所差别

HttpSession接口

HttpSession接口,用来封装会话对象。HttpSession是接口,不能直接new创建对象,会话对象是容器创建的。

获得会话对象:

  1. 在Servlet中:(使用HttpServletRequest中的方法)

    1. public HttpSession getSession();
      // 获得跟当前请求相关的session,如果不存在session,就创建一个新的session对象返回
      
    2. public HttpSession getSession(boolean create);
      // 如果参数create的值为true,则与上面的方法相同;
      // 如果参数create的值为false,那么如果不存在与当前请求相关的session,则返回null,如果存在则直接返回会话对象
      
  2. 在JSP中:直接使用内置对象session,可以直接调用HttpSession接口中的方法。

HttpSession接口中的常用方法:

  • void setAttribute(String key,Object value);
    // 以键值对的形式保存对象值
    
  • Object getAttribute(String key);
    // 通过键获取值
    
  • void removeAttribute(String key);
    // 通过键删除属性
    
  • int getMaxInactiveInterval();
    // 获取session的有效非活动时间,以秒为单位
    
  • void setMaxInactiveInterval(int interval);
    // 设置session的最大非活动时间,以秒为单位,超时将被销毁
    // 如果参数为负数,则表示永不失效
    
  • String getId();
    // 获取session对象的编号
    
  • void invalidate();
    // 设置session对象失效
    
  • boolean isNew();
    // 判断一个session是不是一个新创建的会话对象
    

会话失效

会话对象由容器创建,并保存在容器中。容器维护会话对象将占用很多资源。所以,容器会在默认时间(多数容器默认时间为30分钟)内销毁会话对象。

修改默认销毁时间:

  1. 在web.xml中进行配置:(对所有的会话对象都有效)

    <session-config>
    	<session-timeout>50</session-timeout> // 单位:分钟
    </session-config>
    
  2. 使用HttpSession接口中的setMaxInactiveInterval方法:(仅对此会话对象有效)

    void setMaxInactiveInterval(int interval);
    // 设置session的最大非活动时间,以秒为单位,超时将被销毁
    // 如果参数为负数,则表示永不失效
    

注:如果以多种方法设置会话的有效时间,则以较小时间为准。

立即销毁会话对象:(仅对此会话对象有效)

​ 使用HttpSession接口中的invalidate方法:

void invalidate();
// 设置session对象失效

会话实现机制

有若干客户端与服务器连接,服务器会为每个客户端的一次会话创建一个会话对象,而这些会话对象都在容器中,如何区分会话对象与客户端的联系?

多数容器都使用cookie机制实现会话,也就是说使用cookie来保存客户端与服务器里会话对象之间的对应关系。

(这就是使用请求对象来获取会话对象的原因)

使用cookie实现会话机制的过程:

  1. 当容器创建一个新的会话对象后,即生成一个随机数,称为会话ID,并将ID值封装成一个名为JSESSIONID的cookie,返回给客户端。
  2. 调用request.getSession方法获得会话对象时,容器先从request中获取JSESSIONID值,根据JSESSIONID值查找到对应的会话对象,返回使用。
  3. 如果没有获取到JSESSIONID值,则认为当前请求没有相关联的会话对象,重复步骤1。

cookie与session区别

  1. session保存在服务器端,cookie保存在客户端
  2. session中保存的是任意对象,cookie保存的是字符串
  3. session随会话结束而关闭,cookie可以长期保存在客户端硬盘上,也可以临时保存在浏览器内存中
  4. cookie通常保存不重要的用户信息,重要的信息使用session保存
展开阅读全文
打赏
0
0 收藏
分享

作者的其它热门文章

加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部