HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写

(1)HttpSession概述

HttpSession对象由服务端创建 保存在服务端 (服务端技术)

session底层依赖Cookie

当首次使用session时,服务器端创建session,session是保存在服务器端的,而给客户端的session的id(一个cookie中保存了sessionid)客户端带走的是sessionid,而数据是保存在session中

当客户端再次访问服务器时 在请求中带上sessionid,而服务器会通过sessionid找到对应的session 无需在创建新的session

HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写

(2)获得session对象

在jsp中 可以直接使用 session对象 因为session是jsp的内置对象 和out一样

Servlet中 需要request对象使用getSession();方法获得     例如: request.getSession();

(3)session域对象使用

方法: setAttribute(String name,Object value);  //存储一个域属性

            getAttribute(String name);        //通过域对象名称获得值

            removeAttribute(String name);    //通过域对象名移除域属性

            getAttributeNames();    //获得是所有的域对象名称 返回的是一枚举类型

目前为止学习了三个域对象

HttpServletRequest 一个请求创建一个request对象 所以在同一个请求中共享数据 (请求转发)

ServletContext 一个web应用创建一个ServletContext对象 在整个web应用中共享数据

HttpSession 一个会话创建一个session对象 在同一个会话中的多个请求中共享数据 

案例:登录案例

l  login.jsp:登录页面,提供登录表单;

l  Succ1.jsp:主页,显示当前用户名称,如果没有登录,显示您还没登录;

l  Succ2.jsp:主页,显示当前用户名称,如果没有登录,显示您还没登录;

Servlet

l  AServlet:在login.jsp页面提交表单时,请求本Servlet。在本Servlet中获取用户名、密码进行校验,如果用户名、密码错误,显示“用户名或密码错误”,如果正确保存用户名session中,然后重定向到Succ1.jsp

如果直接登录Succ1.jsp或Succ2.jsp页面 显示没有登录,5秒后跳转到登录页面 

login.jsp

HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写

AServlet.java

HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写

Succ1.jsp    Succ2.jsp 和Succ1.jsp一样

HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写

(4)session对象的常用API

l  String getId():获取sessionId

l  int getMaxInactiveInterval():获取session可以的最大不活动时间(秒),默认为30分钟。当session30分钟内没有使用,那么Tomcat会在session池中移除这个session

l  void setMaxInactiveInterval(int interval):设置session允许的最大不活动时间(秒),如果设置为1秒,那么只要session1秒内不被使用,那么session就会被移除;

l  long getCreationTime():返回session的创建时间,返回值为当前时间的毫秒值;

l  long getLastAccessedTime():返回session的最后活动时间,返回值为当前时间的毫秒值;

l  void invalidate()session失效!调用这个方法会被session失效,当session失效后,客户端再次请求,服务器会给客户端创建一个新的session,并在响应中给客户端新sessionsessionId

l  boolean isNew():查看session是否为新。当客户端第一次请求时,服务器为客户端创建session,但这时服务器还没有响应客户端,也就是还没有把sessionId响应给客户端时,这时session的状态为新。


(5)session对象与浏览器

当一个session长时间没人使用的话,服务器会把session删除了!这个时长在Tomcat中配置是30分钟,

设置session的最大不活动时间

一:在conf/web.xml找到这个配置

HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写

二:在自己的web.xml中覆盖这个配置

HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写

(6)URL重写

在每个页面中的每个链接和表单中都添加名为jSessionId的参数,值为当前sessionid。当用户点击链接或提交表单时也服务器可以通过获取jSessionId这个参数来得到客户端的sessionId,找到sessoin对象。

HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写