Servlet——状态管理Session

1.Session(会话)

(1)session是什么?

服务器端为了保存状态而创建的一个特殊的对象。

注:
    当浏览器访问服务器时,服务器端创建一个特殊的
对象(该对象一般称之为session对象,该对象有一个
唯一的id,一般称之为sessionId)。服务器会将sessionId以cookie的方式发送给浏览器。
    当浏览器再次访问服务器时,会将sessionId发送
过来,服务器端可以依据sessionId找到对应的session
对象。

(2)如何获得session对象?

1)方式一:

HttpSession s = 
    request.getSession(boolean flag);
注:
    a.HttpSession是一个接口。
    b.如果flag为true:
        先查看请求当中是否有sessionId,如果没有,
    则创建一个session对象;如果有sessionId,
    则依据sessionId查找对应的session对象,如果找
    到了,则返回该对象,找不到,则创建一个新的
    session对象。
    c.如果flag为false:
        先查看请求当中是否有sessionId,如果没有,
    返回null;如果有sessionId,则依据sessionId查找对应的session对象,如果找到了,则返回该对象,找不到,返回null。

方式二:

HttpSession s = request.getSession();
等价于 request.getSession(true);

(3)常用方法

1)session.setAttribute(String name,Object obj);

注:
    以name作为key,以obj作为value,将数据存放到了
    一个Map对象里面。

2)Object session.getAttribute(String name);

注:
    如果绑订值不存在,返回null。

3)session.removeAttribute(String name);

注:
    解除绑订。

(4)session超时

a.什么是session超时?

服务器会将空闲时间过长的session对象删除掉。
注:
    缺省的超时时间长度一般是30分钟。

b.如何修改超时时间长度?

方式一 修改web.xml配置文件。

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

方式二  
session.setMaxInactiveInterval(int seconds)
注:
    设置两次请求之间的最大间隔时间,如果超过了
    该时间,则session对象会被删除。

(5)删除session

session.invalidate()

2. 登录

3. session验证

step1.登录成功之后,在session对象上绑订一些数据,
比如:

session.setAttribute("user",user);

step2.当用户访问需要受保护的资源时(即只有登录成功之后才能访问的资源,比如success.jsp),进行session验证,比如:

Object obj = session.getAttribute("user");
if(obj == null){
    //没有登录,重定向到登录页面
    response.sendRedirect("login.jsp");
    return;
}

练习

显示用户上一次访问的时间,如果是第一次访问,则输出“你是第一次访问”。
QAQ感谢你的支持=w=