Cookie和Session的区别和关系

Cookie和Session的区别和关系

在这里插入图片描述
在这里插入图片描述
1.客户端向服务端发送请求,第一次的值为空 cookie:{}

2.服务端接受请求后,设置cookie,request.set_cookie(key,value,),随着响应发给浏览器

如果我们不自己new cookie而通过req.getSession()来设置cookie,那么cookie的名字为JSESSIONID,值为会话id

3.客户端浏览器会把Cookie保存起来 ,第一次登陆,reponse设置一个cookie( JSESSIONID=会话id)

以后每次登陆带着这个cookie,通过key为JSESSIONID拿到会话id,因为cookie可以设置很多个哈。

通过JSESSIONID就能拿到session了,拿到session你就能拿出来登陆设置的各种属性了哈,就能判断出来这个是哪个用户了。

Java中的session存储

sessionid是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应。tomcat生成的sessionid叫做jsessionid。

创建的时机

session在访问tomcat服务器HttpServletRequest的getSession(true)的时候创建,tomcat的ManagerBase类提供创建sessionid的方法:随机数+时间+jvmid。

存储的位置

存储在服务器的内存中,tomcat的StandardManager类将session存储在内存中,也可以持久化到file,数据库,memcache,redis等。客户端只保存sessionid到cookie中,而不会保存session,

session销毁

session销毁只能通过invalidate或超时,关掉浏览器并不会关闭session。

tomcat是用如下结构来保存session的

protected Map<String, Session> sessions = new ConcurrentHashMap<String, Session>()
值为会话id,session对象是保存一个会话的各种属性,就是你调用类似代码的时候

session.setAttribute(“username”, username);

放入Cookie

Cookie cookie = new Cookie(“key”, “value”);
cookie.setMaxAge(3600); // 默认随着浏览器关闭删除
response.addCookie(cookie);
浏览器收到 cookie 后会自动保存,并在下次请求的时候,
自动把所有的 cookie 放入请求头,发送给服务器
Cookie[] cookies = request.getCookies();
如果不为 null,遍历根据 cookie 的 key 一一比较,找到需要的 value
删除 cookie 只需要使用有效期为 0 的同名 cookie 进行替换即可

放入session

每个 client 的 session 独立互不干扰的
HttpSession session = request.getSession();
存数据到 session 中后,即可在任意 jsp 和 servlet 中使用
session.setAttribute(“key”, value);
在 jsp 中通过 EL 表达式获取 session 中保存的数据
${key}
在 servlet 中通过 getAttribute 方法获取保存的数据
String value = session.getAttribute(“key”);
销毁 session
session.invalidate();

发布了31 篇原创文章 · 获赞 8 · 访问量 1517

猜你喜欢

转载自blog.csdn.net/qq_37126480/article/details/103898694