HttpSession 服务端技术 会话跟踪技术 session域对象使用 session对象常用的API session对象和浏览器 URL重写
(1)HttpSession概述
HttpSession对象由服务端创建 保存在服务端 (服务端技术)
session底层依赖Cookie
当首次使用session时,服务器端创建session,session是保存在服务器端的,而给客户端的session的id(一个cookie中保存了sessionid)客户端带走的是sessionid,而数据是保存在session中
当客户端再次访问服务器时 在请求中带上sessionid,而服务器会通过sessionid找到对应的session 无需在创建新的session
(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
AServlet.java
Succ1.jsp Succ2.jsp 和Succ1.jsp一样
(4)session对象的常用API
l String getId():获取sessionId;
l int getMaxInactiveInterval():获取session可以的最大不活动时间(秒),默认为30分钟。当session在30分钟内没有使用,那么Tomcat会在session池中移除这个session;
l void setMaxInactiveInterval(int interval):设置session允许的最大不活动时间(秒),如果设置为1秒,那么只要session在1秒内不被使用,那么session就会被移除;
l long getCreationTime():返回session的创建时间,返回值为当前时间的毫秒值;
l long getLastAccessedTime():返回session的最后活动时间,返回值为当前时间的毫秒值;
l void invalidate():让session失效!调用这个方法会被session失效,当session失效后,客户端再次请求,服务器会给客户端创建一个新的session,并在响应中给客户端新session的sessionId;
l boolean isNew():查看session是否为新。当客户端第一次请求时,服务器为客户端创建session,但这时服务器还没有响应客户端,也就是还没有把sessionId响应给客户端时,这时session的状态为新。
(5)session对象与浏览器
当一个session长时间没人使用的话,服务器会把session删除了!这个时长在Tomcat中配置是30分钟,
设置session的最大不活动时间
一:在conf/web.xml找到这个配置
二:在自己的web.xml中覆盖这个配置
(6)URL重写
在每个页面中的每个链接和表单中都添加名为jSessionId的参数,值为当前sessionid。当用户点击链接或提交表单时也服务器可以通过获取jSessionId这个参数来得到客户端的sessionId,找到sessoin对象。