Servlet复习笔记(7)——Session(详细)

1. 介绍

  • Session 就一个接口(HttpSession)。
  • Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
  • 每个客户端都有自己的一个 Session 会话。
  • Session 会话中经常用来保存用户登录之后的信息。

2.如何创建 Session 和获取(id 号,是否为新)

如何创建和获取 Session的 API 是一样的:

request.getSession() 
  • 第一次调用:创建 Session 会话
  • 此后调用:获取之前创建好的 Session 对象。

判断Session是不是新创建的:

 HttpSession session = req.getSession();
 boolean aNew = session.isNew();

3. Session域

Session域是javaweb四大域之一

protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset:UFT-8");
        HttpSession session = req.getSession();
        session.setAttribute("key1","value1");
        resp.getWriter().println("attribute存储成功");
    }
    protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset:UFT-8");
        HttpSession session = req.getSession();
        Object key1 = session.getAttribute("key1");
        resp.getWriter().println(key1);
    }

4. Session 生命周期

Session 默认的超时时间长为 30 分钟。这是因为在Tomcat服务器的配置文件web.xml中默认有以下的配置,它表示配置了当前Tomcat服务器下所有的Session

 <session-config> 
	 <session-timeout>30</session-timeout> 
 </session-config>

若希望改变 web 工程默认的 Session 的超时时长为其他时长,可在/web/WEB-INF目录下的web.xml 配置文件中做
以上相同配置。

 <!--表示当前web工程。创建出来的所有Session默认是20分钟超时时长-->
<session-config>
	 <session-timeout>20</session-timeout>
</session-config>

若想只修改个别 Session 的超时时长,可使用setMaxInactiveInterval以设置 Session 的超时时间(以秒为单位);超过指定的时长,Session
就会被销毁。

  • interval为正数的时候,设定 Session 的超时时长。
  • interval为负数表示永不超时(极少使用)
public void setMaxInactiveInterval(int interval)
//获取 Session 的超时时间
public int getMaxInactiveInterval() 

//使当前 Session 会话马上超时无效。
public void invalidate() 

在这里插入图片描述

5. Session技术内幕

Session 技术的底层是基于 Cookie 技术来实现的:
在这里插入图片描述

6. Session的活化与钝化

  • Session活化:从硬盘上读取序列化的session到内存中
  • Session钝化:把内存中的session序列化到硬盘上

Tomcat中两种Session钝化管理器

session钝化机制是由sessionManager管理
tomcat提供了以下这两种session处理方式

org.apache.catalina.session.StandarManager
org.apache.catalina.session.Persistentmanager

StandarManager是tomcat的session默认处理方式,如果配置Persistentmanager则使用Persistentmanager,没有配置则使用StandarManager。

1. StandarManager
  • 当Tomcat服务器关闭或者重启时tomcat服务器会将当前内存中的session对象钝化到服务器文件系统中;
  • 另一种情况是web应用程序被重新加载时(其实原理也是重启tomcat),内存中的session对象也会被钝化到服务器的文件系统中
  • 当系统启动时,会把序列化到硬盘上session重新加载到内存中来。这样用户还保持这登录状态,提供系统的可用性。
1. 只有在tomcat关闭和启动的时候才会活化和钝化session
2. 强制kill掉tomcat是不会把session钝化到硬盘上的
2. Persistentmanager

可以将内存中长时间不用的session钝化到硬盘上,减少内存的占用。

例如:当网站有大量用户访问的时候,服务器会创建大量的session,会占用大量的服务器内存资源,当用户开着浏览器一分钟不操作页面的话建议将session钝化,将session生成文件放在tomcat工作目录下。

设置方法: 在 /web/WEB-INF 目录下创建 context.xml文件(也可以在tomcat目录下的其他四个地方创建,在这里建是为了只对这个网站起作用),配置如下:

<?xml version="1.0" ?>  
<Context>  
    <Manager className="org.apache.catalina.session.PersistentManager"  
        maxIdleSwap="1">  
        <Store className="org.apache.catalina.session.FileStore"  
            directory="sessionDir" />  
    </Manager>  
</Context>  

7. Cookie和Session的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以建议:

  • 将登陆信息等重要信息存放为session

  • 其他信息如果需要保留,可以放在cookie中

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值