NO.69 状态管理-session
1.什么是Session?
服务器端为保存状态而创建的一个特殊的对象。
2.工作原理
浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将这个sessionId发送给浏览器(默认以cookie的方式发送),浏览器会将sessionId保存下来(保存在内存);当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器依据sessionId找到对应的session对象。
(3)获取session对象
1)HttpSession s =request.getSession(boolean flag);
a.flag为true时
先查看请求当中有没有sessionId,如果没有,则创建session对象;如果有sessionId,则依据该sessionId去查找对应的session对象(如果找到了,则返回,找不到,则创建一个新的session对象)。
b.flag为false时
先查看请求当中有没有sessionId,如果没有,返回null;如果有sessionId,则依据该sessionId
去查找对应的session对象(如果找到了,则返回,找不到,返回null)。
2)HttpSession s =request.getSession();等价于request.getSession(true);
(4)绑订数据相关的几个方法
session.setAttribute(String name,Object obj)
Object session.getAttribute(String name);
removeAttribute(String name);
代码示例:
(5)session超时
1)什么是session超时
服务器会将空间时间过长的session对象删除掉。
注:默认的超时时间限制是30分钟。
可以修改服务器缺省的超时时间限制30。
2)session.setMaxInactiveInterval(int seconds)
(6)删除session
session.invalidate()
3. session验证
step1.登录成功之后,在session对象上绑订一些数据,比如session.setAttribute("user",user);
step2.当用户访问需要保护的资源的时候(只有登录成功才能访问的资源)
Object obj = session.getAttribute("user");
if(obj == null){
//没有登录
response.sendRedirect("login.jsp");
}
代码示例:
4. 验证码(扩展)
练习: 生成一个长度固定为5个字符,并且这些字符要求从(A~Z,0~9)中随机选取,比如X09BD
代码示例: