第   11   

-THE ELEVENTH-

浏览器基础: Cookie与Session

课程入口(付费)

9a6d6bb352f7640de7a7237571a40ddc.png

个人背景

Li,本科,电子信息工程专业,毕业一年半,有javascript,php,python语言基础,目前自学Web安全中。

浏览器基础2: Cookie与Session

01Cookie的作用方式

1.1 设置一个cookie

因为http是无状态的,要跟踪用户的状态比如登陆信息,就得在每一个http请求中多放一段数据来进行标记。http规范中已经设计好了一个位置让你存放,就是消息头中的cookie段。而cookie可以由服务端发送指令或者客户端通过JavaScript脚本让浏览器生成并保存。

例子:服务端如何在响应的消息头中告诉浏览器设置一个cookie

set-cookie: PHPSESSID=52bbf096pspn59jhp136iba1jr; path=/abc; domain=.pockr.org; secure; HttpOnly
set-cookie: _sso_identity=abc; expires=Sun, 27-May-2018 20:38:11 GMT; Max-Age=604799; path=/; domain=.pockr.org; HttpOnly

这两句set-cookie,是说明服务端生成了2个cookie。

第一个cookie的信息:名字叫PHPSESSID,值是52bbf096pspn59jhp136iba1jr ,path是cookie的有效url路径,有效路径的概念类似于文件夹名称。

域名范围是.pockr.org,是说这个cookie会在pockr.org,以及pockr.org的二级域名的访问中传播,但是需要结合path一起看。

secure的意思是在https协议下的请求才会把cookie发送,如果你用http协议访问的话,就不会发送cookie。这个是为了安全起见。毕竟http协议是明文的协议,一旦你被劫持了,cookie被第三方窃取到了,你的信息就会泄露出去。

HttpOnly则是让浏览器禁止JavaScript读取这个cookie,同样也是为了安全起见。有时候网站用了一些第三方服务,需要加载第三方的JavaScript脚本,如果第三方JavaScript脚本被篡改了,最低程度能保证你的cookie信息不会被JavaScript脚本获取而泄露出去。

1.2 了解cookie的有效性

c8c355f5a7d18b32b1fafa30b45ce530.png

  • 第一个地址是无效的,因为浏览器遵循secure标记,只在https中传输这个cookie,而这个地址是http;

  • 第二个地址,也是无效的。因为这个url的path是/abcd,与cookie的/abc不一致;

  • 第三个地址,它是有效的。因为/abc/1,相当于文件夹abc下面有一个文件是1,是包含关系;

  • 第四个地址是有效的,完全匹配,没什么解释的必要;

  • 第五个地址是有效的,b.pockr.org符合cookie中domain=.pockr.org的规则;

  • 第六个地址是无效的,a.b.pockr.org是一个三级域名,cookie中的domain=.pockr.org没有规定三级域名是有效的。

02Session

2.1 Session是什么

Session是存在服务器的一种用来存放用户数据的类HashTable结构。

浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。

浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。

一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。当用户在应用程序的 Web页间跳转时,存储在 Session 对象中的变量不会丢失而是在整个用户会话中一直存在下去。 

2.2  Cookie与Session的区别

存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象。

一个在客户端一个在服务端。因Cookie在客户端所以可以编辑伪造,不是十分安全。

Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。

域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com 的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。

下期更新笔记内容:

浏览器基础3:CSP与浏览器安全策略

21a9e7cd7e21488847955d90066e09b5.png

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐