cookie和session
cookie实现原理:
//使用cookie的主要方法
// 服务器从客户端请求中(req)获取cookie信息
Cookie[] cookies = req.getCookies();
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
//如果不存在cookie,则服务端给客户端响应(resp)一个cookie;如果存在cookie,则会刷新cookie
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); // 设置cookie的有效期
resp.addCookie(cookie); // 服务器响应给客户端一个cookie
session实现原理:
- 服务端首先查找对应的cookie的值(sessionid)
Cookie[] cookies = req.getCookies();
cookie.getName();
-
根据sessionid,从服务器端session存储中获取对应id的session数据,进行返回
-
如果找不到sessionid,服务器端就创建session,生成sessionid对应的cookie,写入到响应头中
//得到Session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("秦疆",1));
//获取Session的ID
String sessionId = session.getId();
//判断Session是不是新创建
if (session.isNew()){
resp.getWriter().write("session创建成功,ID:"+sessionId);
}else {
resp.getWriter().write("session以及在服务器中存在了,ID:"+sessionId);
}
//Session创建的时候做了什么事情 (原理:即服务器通过cookie响应给客户端sessionId,而session是由服务器生成的)
Cookie cookie = new Cookie("JSESSIONID",sessionId);
resp.addCookie(cookie);
PS:
- SessionID相当于钥匙(钥匙是通过服务器响应回来的cookie得到的),可以存放东西的柜子(session)存放在服务器;而cookie是把资源放在人(即客户端)这里
- Session是面向单个用户的,而ApplicationContext(即ServletContext)是面向全体用户的,一个是私人的储物柜,一个是大院子
- 每个用户对应不同的SessionID
Session和cookie的区别:
- Cookie是把用户的数据写给用户的浏览器,浏览器保存(resp.addCookie(cookie);) (可以保存多个)
- Session把用户的数据写到用户独占Session中(每个Session有自己的ID,每个浏览器都不同),服务器端保存 (只保存重要的信息,减少服务器资源的浪费)
- Session对象由服务器创建;(req.getSession()只是获取Session,即使不写,Session依旧存在;Session是服务器端的)

浙公网安备 33010602011771号