Cookie和Session详解
Cookie
Cookie只存储在客服端
Cookie是什么:Cookies是web服务器存放在用户硬盘的一段文本,Cookies容许一个wen站点在用户的机器存放一些文本的信息,并能够在之后从新获取它。这个基于文本的信息存储着一些“键-值”对。

Cookie在http浏览器里面的使用过程
1.当浏览器发送请求时,它会查看你机器上跟域名www.test.com有关的Cookie文件,若是存在同www.test.com有关的 Cookie,浏览器就会把相关的Cookie“键-值”对数据跟请求一块儿发送到服务器(),若是不存在同www.test.com有关的 Cookie,则浏览器不发送Cookie到服务器。php
http协议中,在Request Headers里面经过Cookie:PHPSESSIS=123456发送
2.服务器若是返回Cookie,浏览器会把Cookie存储在域名www.test.com有关的Cookie文件中,提供给下次请求调用程序员
http协议中,在Response Headers里面经过Set-Cookie:PHPSESSIS=123456(名字,值,过时时间,路径和域)返回
3.固然,不是所有Cookie都会存储起来,Set-Cookie设置的过时时间web
- 持久性cookie,设置了cookie的时间,以文件方式存在硬盘上
- 会话cookie,没有设置cookie时间,cookie的生命周期也就是关闭浏览器前就消失,通常不会保存在硬盘,而是保存在内存上
4.因此单纯使用Cookie不安全数据库
Cookie其实就是键值对存储在文件中,若是一些用户名都存储在里面,只需简单修改文件里面的用户名,就能够达到模仿他人登陆,因此相对不安全,固然能够经过其余手段避免,例如加密加盐
Session
Session存储在服务端(中介是Cookie或者直接url,使用url传递session_id不详说,这种使用场景比较少)
简单来讲,一个请求到达的时候,服务器会先判断是否带有Session信息。若是有,则根据Session ID去数据库中查找是否具备对应的用户身份信息。此处可能会出现Session失效、非法的Session信息等可能性,那么服务器视同无Ssession信息的状况,从新的产生一个随机的字符串,而且在Http返回头中写入新的Session ID信息。另外一者,若是服务器成功获取了用户的身份信息则以该身份为请求者提供服务。在http中,客服端的请求里面的session id通常是经过cookie带过来的,因此Session也依赖于cookie。
以php里面Session举例,session_start()开启
- 首先会去获取客户端cookie里的session_id,若是不存在,会从新建立一个
- 根据session_id,取到全部相关的信息,放入$_SESSION全局变量里以供使用
- 若是写session,也是根据session_id写入相关文件,并放入$_SESSION全局变量里以供使用
设置登陆态的过时时间,须要设置session的过时时间以及cookie的过时时间才能够真正生效(ini_set修改)
这个表明SessionID在客户端Cookie储存的时间,默认是0,表明浏览器一关闭SessionID就做废
这个是Session数据在服务器端储存的时间,若是超过这个时间,那么Session数据就自动删除
Cookie 和 session 传输的区别

Cookie主域名和子域名之间的共享
总的来讲,设置cookie的话只能在本域名下或者domain级别高于自身的域名下才会生效!
- 二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其余二级域名domain的cookie。例如:要想cookie在多个二级域名中共享,须要设置domain为顶级域名,这样就能够在全部二级域名里面或者到这个cookie的值了。
- 顶级域名只能获取到domain设置为顶级域名的cookie,domain设置为其余子级域名的没法获取。
多系统共用登陆态的方法一(cookie共享)
- 在顶级域名下开启session
- 使用同一个session_id
- 必须是二级域名,不一样域名不适合使用
多系统共用登陆态的方法一(SSO,限制没这么多)
- 浏览器访问单点登陆的网站,若是session存在就返回数据,若是不存在就跳转到cas server(一个单独域名的服务)
- 若是有已经登陆过,经过检测cookie,cas server就会302跳转经过url返回Ticket(Ticket是随机且惟一)到网站,若是没有登陆过,就跳转到cas server登陆页面进行登陆,登陆成功设置cookie,而后302跳转返回Ticket到网站,同时cas server会存储改Ticket、cookie和网站host的对应关系。
- 网站接收到Ticket后经过cas server提供的校验url去校验Ticket,cas server确认后返回成功,网站写入当前域名的sessionid
- 当用户再访问网站的时候,就会判断当前session是否登陆
两种登录方式图

更多内容请关注微信公众“p12310086”,一个程序员和hr一块儿运营的公众号!
