Java三十七篇:cookie和session
1.cookie 是什么



httpOnly 是限制js,ajax,document.cookie去访问


注意:set-cookie传递的cookie的限制条件,在cookie是不会携带的,是浏览器自己处理掉了。


2.使用cookie的限制


3.session 是如何利用cookie机制实现用户登录验证的

在实际业务中,很多请求需要用户已登录状态。这个时候,用户首次登录,服务器接收用户的姓名和密码,然后生成一个有时效性的session,然后用set-cookie传给客户端,并设置cookie的时效等。浏览器传递给服务器cookie,服务器就可以进行session比对,正确则返回数据。
4.第三方cookie

用户访问First-Party网站,然后这个网站的网页引用了Third-Party的某些图片,那么浏览器是可以下载这些图片的,但是当下载这些图片的时候,Third-Party通过set-cookie把cookie设置在了浏览器上,这样当浏览器直接访问这个Third-Party的时候,就会自动携带这个cookie。这样Third-Party就知道浏览器曾经访问过First-Part的某些网页,从而搜集用户的行为。
5.cookie存在的安全问题
1.明文传输,存在安全问题
2.大小限制,超过大小可能会丢失
3.站点之间可能互相访问cookie,造成安全问题
1.使用Https
2.大小不超过4K
3.同源策略
1.什么是同源策略


2.没有同源策略会存在什么问题
1.第一个问题:只能保证cookie是来自同一个浏览器,不能保证是用户自愿发起的。

用户向一个站点发起请求,很多请求可能不是用户自发的行为,比如先请求A站点,然后A站点返回一个HTML文件,然后引用B站点的一个JS文件,于是浏览器就向B站点请求一个JS文件。而这个行为不是用户自发的行为。

这样的话就相当于B站点可以返回站点A了,不用登陆就可以了。
2.站点B可以随意攻击站点A。

用户同时打开A\B两个站点。B站点可以通过JS去攻击站点A,比如修改用户的输入值,造成攻击等。
4. 同源策略也防止不了的CSRF

总结:
Cookie是客户端保存用户信息的一种机制,存储在客户端的文件中。
cookie存在的问题:
1.明文传输,存在安全问题
2.大小限制,超过大小可能会丢失
3.站点之间可能互相访问cookie,造成安全问题
解决问题方案:
1.使用Https
2.大小不能超过4k
3.同源策略(协议、主机、端口号完全相同)

Cookie 与 Session 的区别:
Cookie 存在浏览器的文件里,Session 存在服务器的文件里
Session 是基于 Cookie 实现的,具体做法就是把 SessionID 存在 Cookie 里
共同点 :由服务端统一设置发送给客户端。