一切的罪魁祸首都是由于HTTP协议是无状态的,也就是说没有上下文的!那么对于网站来说,它只能输出网页了,至于用户啥的就搞不定了。显然不可接受,于是有了:
COOKIE在浏览器保存信息,SESSION在服务器保存信息,我们可以在Chrome里面F12可以看到COOKIE的内容:
各列的含义如下:
属性 | 含义 |
---|---|
Name | 键 |
Value | 值 |
Domain | 域名 |
Path | 路径 |
Expires/Max-age | 过期时间,超过过期时间会被删除 |
Size | 大小 |
Http | 限制脚本访问和修改,可以在一定程度提升安全性 |
Secure | 只在HTTPS的链接中才能正常使用,否则就当它不存在吧 |
以后再发送请求的时候就会带上COOKIE,服务器上拿到之后就可以判断是哪个用户发过来的请求了!既然请求都会带COOKIE,那么如果保存了很多数据的话也会给网络传输增加负担,所以使用需谨慎!其实浏览器对大小也有限制,而基本上做的都是规范的下限:
要是别人向我的网站写入COOKIE然后再操作怎么办?不知道别人有没有过类似的担心,因为有域名的限制,所以总体来说COOKIE还是挺好用的!
在COOKIE中存放三个东西:
这样可以保证每个用户只能登录一次,而且可以通过判断随机数是否发生变化来做盗用检测,这时候可以通过重新登录并生成登录序列来使盗用者的COOKIE失效。
当然登录还有很多有趣的细节,可以看这里。
在cookie中保存很多关键性的数据,不过不安全还是挺蛋疼的,我们来看看这套机制的设计者是如何考虑安全问题的:
不能跨域访问
要是我能随便增加、删除别人的网站上面的cookie,那就没法玩了~ 由于在JS中也可以操作cookie,那么对于有输入的应用(比如博客)就危险了,用户输入一段JS同样也可以进行操作了:
设置HttpOnly属性之后不能通过脚本访问
有了上面两个限制,那么剩下的事情就是防止别人模拟发送请求就可以了,比如通过随机数的方式。