1、会话管理的三种解决方案
(1)使用隐藏域
在JSP中将input标签的type属性值设定为hidden,即生成一个隐藏表单域。再将会话的唯一标识记录到隐藏域中的value属性中,并设定name属性值。当表单提交时,会话标识也被提交到服务端,服务端根据它找到对应的会话对象。使用隐藏域时,需要在每个页面中都包含会话标识表单,这样才能在许多页面跳转之间保存会话,并对他进行管理。
(2)使用Cookie
原理是在服务端保存的会话对象中设定会话的唯一标识,客户端将会话标识保存在cookie中,当浏览器发起请求时,从cookie中取得会话标识并发送给服务器,服务器在收到请求后,根据发送过来的会话标识查找到对应的会话对象,这样服务端就清楚当前是哪个客户端在连接,并且可以从会话中获得信息。
(3)使用URL重写
在URL地址的末尾添加会话标识,改写了原来的URL地址。用于客户端不支持Cookie的情况下。重写方法如下:
response.encodeURL("login.jsp");
或者:
response.sendRedirect(response.encodeRedirectURL("login.jsp"));
如果客户端支持Cookie,则生成的URL不变;如果不支持,生成的URL中会带有jsessionid字符串的地址。
2、会话管理的主要任务
生成唯一的会话标识、存储会话对象、从web容器中取得当前请求的会话、回收空闲会话。
3、获取用户的session对象
HttpSession session = request.getSession(); //获取Session对象
Session.setAttribute("username","Shana"); //设置Session中的属性
4、在web项目中禁用cookie
(1)对单个项目禁止
在web项目的WebRoot目录中的META-INF文件夹下,打开或者创建context.xml文件,编辑内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context cookies="false" path="/ch06">
</Context>
(2)禁止部署在Tomcat服务器里的所有web项目
打开Tomcat的配置文件context.xml,编辑内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context cookies="false" >
......
</Context>
5、HttpSession的有效期设定方法
(1)调用Session的setMaxInactiveInterval(long interval)进行设定
(2)在web.xml中修改,例如:
<session-config>
<!-- 会话超时时长为30分钟 -->
<session-timeout>30</session-timeout>
</session-config>