看完这篇session和cookie你就可以招架住面试官了

seesion和Cookie出现的原因?

因为http协议是无状态无连接的,在客户端向服务器发送请求响应完毕以后,二者的连接就断开了,这个过程称为一次会话(字面理解就像两个人进行了一场谈话,可以理解为cookie和session的这场谈话结束)结束,但有些场景,比如要进行登录记住密码或者多长时间免登录之类的,这时就要用的session和cookie;就是为了让服务器认识你是谁

cookie和session的工作原理

cookie
当客户端给服务器发送一些请求时携带者自己的用户信息,发过去之后,服务器给客户端返回一个cookie信息,客户端将这个信息保存在cookie中,每次携带着这个信息给服务端,服务端根据这来判断是不是一个用户,服务器还可以根据需要修该cookie的内容;
听着有点绕?就比如大学刚开学,你第一次去图书馆借书,管理员给了你一张图书卡,以后你每次去借书,图书管理员就通过这张卡认识你是谁;这张卡的作用就相当于cookie;
session
浏览器第一次访问服务器时会创建一个session对象并返回一个sessionId,客户端将这个sessionId保存在cookie中,下次请求的时候带着这个cookie,也就是这个sessionId,服务器根据这个sessionid来判断; 创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器;
还是上面这个例子;你去图书馆借书,管理员给你办了一张卡,但不同的是,他只告诉你卡号,卡的信息存在管理员的电脑上;你每次去借书,报这个id,管理员通过对比来确认用户信息;

说说Cookie和Session的区别?

1、Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
2、Cookie有大小限制,只能存放4k的数据(每次要携带cookie信息,所以对大小进行了限制;session存放在服务器端,理论上只要你内存足够大就行,不进行大小限制;
3、cookie存在安全问题,黑客可以通过拦截或本地文件找得到你的cookie后可以进行攻击。
4、Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
5、session依赖于cookie,cookie可以设置过期时间;

session和cookie的使用场景

Cookie:自动登录的,游戏分数的保存

Session常见的应用场景是:会话

本地禁用cookie?session还能使用吗?

通过上面我们知道,服务器存储session的sessionid是通过cookie存到浏览器里。那岂不是禁用session,cookie也不能使用了?答实际并不是这样,可以通过以下办法解决;

●通过url重写,把sessionid作为参数追加的原url中,后续的浏览器与服务器交互中携带sessionid参数。

●服务器的返回数据中包含sessionid,浏览器发送请求时,携带sessionid参数。

分布式session解决方案?

客户端向服务器发送一个请求,这个请求被随机分配到其中一个服务器上,比如第一次用户在 A 服务器登录了,第二次请求跑到服务 B 就会出现登录失效问题。这时该怎么办?

Session 复制:任何一个服务器上的 Session 发生改变(增删改),就在一个局域网里面发送广播,让其他服务器全都更新,这在实际中应用并不多,因为当用户量太大时,内存就会不足;

Nginx ip_hash 策略:服务端使用 Nginx 代理,每个请求按访问 IP 的 hash 分配,这样来自同一 IP 固定访问一个后台服务器,避免了在服务器 A 创建 Session,第二次分发到服务器 B 的现象。

基于redis存储Session

猜你喜欢

转载自blog.csdn.net/chris__x/article/details/107761795