什么是cookie?
我们都知道,Http的特点是无状态,无连接,服务器但从网络连接上是无法知道用户的身份,那么怎么办呢? 所以它就会给每个客户端的用户颁发一个通行证,这样服务器就能从这个通行证确认客户的身份了,这个通行证就是cookie~客户端请求服务器的时候,如果服务器需要记录这个用户状态,就使用response向客户端浏览器发一个小cookie,客户端浏览器会把这cookie保存起来,再次请求时就带着cookie一同提交给服务器,以此来辨认用户状态。
cookie的基本工作原理
cookie主要是通过报头HTTPHeader来传递数据,也就是在请求头和消息头里面传递数据,cookie机制有两种报头,set-cookie和cookie。set-cookie存在服务器响应的消息头中, cookie则存在于客户端请求的消息头中。(图片来自网上)
<br style="box-sizing: border-box;"/>
(1)客户端在浏览器输入URL,发送读取网页的请求。
(2)服务器接收到请求后,产生一个Set-Cookie报头,放在HTTP报文中一起回传客户端,发起一次会话。
(3)客户端收到应答后,若要继续该次会话,则将Set-Cookie中的内容取出,形成一个Cookie.txt文件储存在客户端计算机里。
(4)当客户端再次向服务器发出请求时,就在电脑里找该网站的Cookie.txt。根据此Cookie.txt产生Cookie报头,放在HTTP请求报文中发给服务器。
(5)服务器接收到包含Cookie报头的请求,检索其Cookie中与用户有关的信息,生成一个客户端所请示的页面应答传递给客户端。 浏览器的每一次网页请求,都可以传递已存在的Cookie文件,如浏览器的打开或刷新网页操作。
cookie格式
Cookie由变量名和值组成,格式如下:
Set-Cookie: "name=value;domain=domain.com;path=/;expires=Sat, 11 Jun 2016 11:29:42 GMT;secure"其中name=value是必选项,其它都是可选项。
我们可以在浏览器中查看我们的cookie,在设置-隐私设置和安全性-内容设置-cookie-查看所有cookie和网站数据,来查看我们在当前浏览器上所有的cookie,如下图 可以在chrome中查看百度的cookie
也可以通过浏览器F12查看当前的cookie,在F12后,network-cookie中查看对应的cookie:
跳转的cookie:
在广告业务的测试中,我们经常需要从admin平台跳转到某一个账户的投放平台上,admin平台的url:admin.test.123.cn ,投放平台的url:test.123.cn。 那么为什么我们可以从一个平台跳转到另一个平台而不用登陆呢? 因为我们有神奇的小饼干—cookie哦!
因为我们在admin.test.123.com上登录的时候,会在test.123.cn上种cookie,当我们在跳转到平台的时候,这个cookie的域没有变,仍是test.123.cn 所以平台是可以直接登录,而不用再次输入用户名密码。
有的时候我们在业务线测试中,需要模拟登录,从a.qihoo.net 模拟登录跳转到 test.e.360.cn ,域名不一样,为什么也是可以直接跳转,不需要输入用户名密码呢? 因为header跳转可以给其他站点设置cookie,为啥捏? 举个例子吧~
1 在 http://a.com/test.php代码:
header('location:http://b.com/test.php');
2 在http://b.com/test.php的代码:
setcookie('name','qqq',time()+3600);
在访问a.com/test.php 的时候 我们发现页面会跳转到b.com/test.php 并且在b.com上设置了cookie,过程可以理解为浏览器请求a.com/test.php 的时候a.com服务器返回302给浏览器,浏览器拿到相应消息头的location,存到内存中后,此时浏览器与a.com的通信过程其实就结束了,也就是一个请求与相应就结束了,然后浏览器拿着location地址重新请求b.com/test.php ,所以我们就可以看到浏览器跳转的画面了,此时b.com返回给浏览器相应消息头里面有set-cookie 的消息,那么浏览器得到这个cookie信息生成的文件就会存放到浏览器中的目录下了。可以理解为如下所示的过程:
在实际业务中,我们需要从a.qihoo.net模拟登录跳转到test.e.360.c,所以这个过程可以理解为:从a.qihoo.net 模拟登录跳转到 test.e.360.cn,实际上是我们从a.qihoo.net上location到test.e.360.cn上,并在e.360.cn上种了cookie,这个cookie信息通过加密,所以我们就可以不用登录直接可以跳转了 。在实际业务中是怎么保证加密安全的呢?一般会用到第三方的服务,从a.qihoo.net平台跳转到test.e.360.cn平台的时候,可以带一个token值,这个值是a.qihoo.net平台用了一个oauth服务,通过用户名密码得到的一个值,传给了test.e.360.cn平台,它在接到这个token值后也使用了这个服务去解密,得到用户名密码, 这样就可以种这个用户名和密码的cookie了~ 实现跳转啦~
<br style="box-sizing: border-box;"/>
Q
<br style="box-sizing: border-box;"/>
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有