目录
1.Cookie
1.1Cookie是什么 ?
Cookie,其实就是储存在用户本地终端上的数据(通常经过加密),由用户计算机暂时或永久保存的信息,类型为“小型文本文件”。
可以理解是某些网站为了辨别用户身份
,进行Session跟踪而储存在用户本地终端上的数据。
1.2为什么要使用Cookie?以及Cookie的机制
HTTP是无状态的,不能保存每次提交的信息,如果用户发来一个新请求,服务器无法知道它是否与上次的请求有联系。
cookie的出现就是为了解决这个问题。
登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户再次发送请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户的状态。
具体如下图:
2.Session
我们先来了解⼀下什么是会话?
在计算机领域, 会话是⼀个客⼾与服务器之间的不中断的请求响应,当客⼾明确结束会话或服务器在⼀个时限内没有接受到客⼾的任何请求时,会话就结束了。
2.1Session是什么?
Session的本质就是⼀个 "哈希表", 存储了⼀些键值对结构. Key 就是SessionID, Value 就是⽤⼾信息(⽤ 户信息可以根据需求灵活设计)
2.2具体流程
2.客⼾端后续再给服务器发送请求的时候, 需要在请求中带上 sessionId. (通过 HTTP 请求中的 Cookie 字段带上).
3.服务器收到请求之后, 根据请求中的 sessionId在 Session 信息中获取到对应的⽤⼾信息, 再进⾏后 续操作.找不到则重新创建Session, 并把SessionID返回
注意:
(1)Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失。
(2)同一客户端启动二次session_start的话,session_id是不一样的。
3.cookie和session常见面试题
3.1Cookie 和 Session 的区别
(1)Cookie 是客⼾端保存⽤⼾信息的⼀种机制. Session 是服务器端保存⽤⼾信息的⼀种机制.
(2)Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的桥梁。
(3)Cookie 和 Session 经常会在⼀起配合使⽤. 但是不是必须配合。
Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, ⽐如通过URL传递。
3.2session产生的session_id放在cookie里面,如果用户把cookie禁止掉,是不是session也不能用了呢?
禁止掉cookie后,session当然可以用,不过通过其他的方式来获得这个sessionid,比如,可以跟在url的后面,或者以表单的形势提交到服务器端。从而使服务器端了解客户端的状态。
4.获取Cookie和Session
4.1获取Cookie
4.1.1传统获取Cookie
@RequestMapping("getC")
public String getC(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
Arrays.stream(cookies).forEach(ck -> System.out.println(ck.getName() + " " + ck.getValue()));
}
return "获取Cookie成功";
}
4.1.2简洁获取Cookie
比如我们获取Cookie的值
@RequestMapping("getC2")
public String getC2(@CookieValue("wh") String val) {
return "获取Cookie成功 cookie的值" + val;
}
4.2获取Session
4.2.1设置Session
@RequestMapping("setSession")
public String setSession(HttpServletRequest request) {
HttpSession session = request.getSession();
session.setAttribute("name", "wh");
return "设置成功";
}
4.2.2传统获取Session
@RequestMapping("getSession")
public String getSession(HttpServletRequest request) {
HttpSession session = request.getSession();
String name = (String) session.getAttribute("name");
return "name:" + name;
}
4.2.3简洁获取Session1
@RequestMapping("getSession2")
public String getSession(HttpSession session) {
String name = (String) session.getAttribute("name");
return "name:" + name;
}
4.2.4简洁获取Session2
@RequestMapping("getSession3")
public String getSession(@SessionAttribute("name") String name) {
return "name:" + name;
}
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞