状态管理---session
session (会话)
(1)什么是session?
- 服务器端为了保存用户状态而创建的一个特殊的对象
(2)session工作原理
- 当浏览器访问服务器的时候,服务器创建`session`对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId以Cookie的set-Cookie方式发送给浏览器.当浏览器再次访问服务器的时候会将sessionId发送过来,服务器可以使用该sessionId,依据该sessionId找到对应的session对象
(3)如何获得session对象
- 方式一
HttpSession session = request.getSession(Boolean flag);
说明:
HttpSession是一个接口,session对象是一个符合该接口的对象.
(1)当flag == true时
先查看请求当中有没有sessionId,如果没有则创建一个session对象;如果有sessionId,则依据该sessionId查找对应的sessionId对象,如果找到了,则返回该session,如果找不到,则创建这个session对象并返回.
详细细节:
(2)当flag == false时
先查看请求当中有没有sessionId,如果没有,返回null,如果有sessionId,则依据该sessionId查找session对象,如果找到了,则返回session对象,如果找不到则返回null.
- 方式二
HttpSession session = request.getSession();//等价于request.getSession(true);
(4)session常用方法
- 绑定数据的方法
setAttribute(String name , Object obj);
getAttribute(String name);//依据绑定名查找数据,如果找不到返回null
removeAttribute(String name);//删除
String getId();//获取sessionId
(5)session超时
- 服务器会将空闲时间过长的session对象删除掉
注:一般服务器缺省的超时时间长度一般是30分钟
- 超时时间修改
- 1: 修改web.xml文件中的配置(servers-->web.xml)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
也可将该段代码添加到当前应用的web.xml中
- 2: session.setMaxInactiveInterval(int interval);//设置最大时间间隔s
两次请求之间的最大间隔不能超过这个时间
(6)删除session
- session.invalidate() 失效(删除)
(7)session验证(day07-lab)
- step1:在登录成功之后,绑定一些数据到session对象上.比如
session.setAttribute("user",user);
- step2:当用户访问需要保护的资源时(只有登录成功之后次啊能访问的资源),比访问success.jsp,进行session验证.
Object user = session.getAttrite("user");
if(user == null ){
//没有登录,重定向到登录页面
response.sendRedirect("login.jsp");
}
(8)比较session和cookie
- session相对于cookie,优点是更安全,能存放更多的数据,支持更丰富的数据类型, 但是session会u占用服务器端的内存空间,如果用户量更大,会占用大量的内存空间(cookie不占用服务端的资源),session需要服务器端同步.
路径问题
- 指的是链接,表单提交,重定向,和转发时,如何填写路径.
- `<a href="">`
- `<form action="">`
- `response.sendRedirect("")`
- `request.getRequestDispatcher("")`
(1) 相对路径
- 不已"/"开头的路径就时相对路径
(2) 绝对路径
- 以"/"开头的路径就是绝对路径
(3) 如何写绝对路径
- 链接,表单提交,重定向:从应用名开始写
- 转发:从应用名之后开始写
注:一定不要将应用名写在路径里面,使用:`request.getContenxtPath()`获取实际部署时的应用名,该方法返回的应用名前面加了"/"
IE禁用Cookie后的session处理
- 解决方案:URL重写
- response. encodeRedirectURL(java.lang.String url)
- 用于对sendRedirect方法后的url地址进行重写。
- response. encodeURL(java.lang.String url)
- 用于对表单action和超链接的url地址进行重写
- 附加:
- Session的失效 invalidate()立刻实效
- Web.xml文件配置session失效时间
Cookie和Session的区别
1、Cookie将会话中产生数据保存在客户端, 是客户端的技术
2、session将会话中产生的数据保存在服务器端, 是服务器端的技术
3、Cookie将会话中产生的数据保存在客户端, 容易随着用户的操作而丢失或者被窃取. 因此Cookie适合存储对安全性要求不高, 但是要求存储时间比较长的数据
4、session是将会话中产生的数据保存在服务器端, 虽然不容易随着用户的操作而丢失. 但是在服务器中会占用服务器的空间, 因此session适合存储要求时间不长, 但是要求安全性比较高的数据.
5、Cookie的应用场景: 比如: 在网页中显示上次访问时间、记住用户名、实现购物车
6、Session的应用场景:保存用户的登录状态、实现购物车