1.HTTP协议无状态
什么叫无状态?
HTTP协议是无状态的,就是没有记忆力
默认情况下HTTP协议的客户端和服务器之间这次通信,和下次通信之间没有直接的联系。
Cookie客户端
Session服务器
Session类似于一个哈希表,存储键值对结构
2.一个客户端对应一个sessionID
当用户登陆服务器时,服务器会在Session中新增一个记录,并把【sessionId】返回给【客户端】(通过HTTP响应中的Set-Cookie字段返回)
——》客户端后续再给服务器发送请求的时候,都会在请求中带上【sessionId】(通过HTTP请求中的Cookie字段带上)
——》服务器收到请求后,根据请求中的sessionId 在Session信息中获取到 对应用户信息,再进行后续操作;如果根据sessionId找不到对应Session信息,服务器就会重新创建Session,并把SessionId返回给客户端。
3.获取Cookie
1.传统获取Cookie
内置对象
2.简洁获取Cookie
@CookieValue
@CookieValue String type
直接从本次请求携带的Cookie里取出指定名字的【Cookie值】
,并赋值给后面的参数【type】
4.获取Session
getSession()底层等价于getSession(true),作用是:拿到当前请求对应的HttpSession对象;
true:
如果这个请求已经带了JSESSIONID,服务器找到对应的session,返回这个session;
如果没有找到session,服务器会自动创建一个Session,并且把新的sessionId放到Cookie返回给浏览器。
false:
如果能找到对应的session,返回这个session;
如果没有找到session,不会创建,直接返回null。
客户端请求
服务器会set-Cookie返回一个值
客户端把这个值设置进Cookie里。
接收参数【HttpServletRequest】与【HttpRequest】的区别
HttpSession:Spring MVC底层帮你调用request.getSession(),把session对象直接传进来。
5.设置Session
设置session前 先获取session
获取session
服务端有多个HttpSession
每一个访问网站的浏览器用户,都会单独分配一个属于她的Session对象。各个session对象互不干扰,服务器内部用以一个map存。
第一次getSession对象
用户第一次访问网站,浏览器还没有JSESSIONID这个Cookie。调用getSession(),服务器新建一个Session,生成唯一的sessionId,把sessionId放到Cookie里返回给浏览器,浏览器存下这个Cookie
后续getSession对象的区别(根据代码)
true:浏览器带着JSESSIONID来,服务器拿着sessionId去找对应的session,找到就返回已有的,找不到就返回一个新建的
false:找到就返回已有的,找不到直接返回null
根据sessionId取到对应的session对象
浏览器每次请求自动带上Cookie(里面存着sessionId)。服务器拿到这个sessionId,去session容器里按id找对应的session,后续就可以读取里面存的信息
换sessionId
可以调用session.invalidate()让当前 session 直接失效
重启服务器session会丢失,要重新设置
Tomcat的session默认存在服务器内存里,服务器一关,内存全部清空,所有session直接消失
6.获取Header
1.
2.@RequestHeader
@RequestHeader ("User-Agent") String UserAgent:
从请求头里取出指定名字的请求头的值,赋给后面的参数UserAgent