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实现原理:

  1. 服务端首先查找对应的cookie的值(sessionid)
Cookie[] cookies = req.getCookies(); 
cookie.getName(); 
  1. 根据sessionid,从服务器端session存储中获取对应id的session数据,进行返回

  2. 如果找不到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是服务器端的)

链接:

Redis实现分布式Session
session + redis 实现session 共享原理和原因

posted @ 2021-08-23 17:24  Looye  阅读(31)  评论(0)    收藏  举报