Session原理
Session对象是保存在服务端的,服务端为了区分不同客户端的请求,会为每一个不同的客户端创建一个会话对象(Session),作为不同客户端用户的唯一标识,起到取分、跟踪的作用。
每次HTTP请求的时候,客户端都会发送对应的Cookie信息到服务端。第一次创建Session的时候,服务端会在HTTP协议中通知客户端,在 Cookie 里面记录一个Session ID,以后每次请求把这个Session ID发送到服务器,用以在服务端创建具有唯一性的Session对象。如果客户端的浏览器禁用了 Cookie ,一般这种情况下,会使用URL重写的技术,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
Session使用范例:实现用户登录功能,并在主页显示用户ID
- 服务端的Session是一个对象,并且有保存键值对的功能。所以每次我们打开主页时,可以使用Ajax请求,查看在服务端对应的该客户端Session中是否保存了用户ID,如果没有,则在主页显示需要登录。
- 登录完成后,利用Ajax请求将用户ID和密码传到服务端,服务端连接数据库检查用户ID且密码无误后,将用户ID以键值对的形式保存在Session对象中。
- 服务端告诉客户端查询无误,随后客户端在进行Ajax请求取得Session对象中的用户ID,并将用户ID显示在主页上。这样,整个流程就完成了。
服务端代码:
- 设置键值对存储用户ID
//HttpServletRequest request.getSession()方法可取得Session对象
HttpSession session= request.getSession();
//设置Session对象的有效时间(超过该时间未操作则失效),参数单位为秒
session.setMaxInactiveInterval(10);
/* public class UserInfo {
public String ID;
public String PassWord;
.......省略get()、set()
}*/
session.setAttribute("email",userInfo.getID());
- 接收Ajax请求,返回Session中存储的用户ID
//SpringMvc
@ResponseBody
@RequestMapping(path = "/getSession.do",method = RequestMethod.GET)
public String getSession(HttpServletResponse response,HttpServletRequest request){
return (String)request.getSession().getAttribute("email");
}
- 客户端Ajax请求取得Session中的用户ID
window.onload=function () {
$.get("/Login/getSession.do",{},function (user) {
if(user===""){
alert("您还未登录,请尽快登录");
}else{
alert(user);
...
}
})
}