http学习 cookie

无状态的http协议

http是无状态的,这即是优点也是缺点。优点是服务器没有状态差异,可以很容易的组成集群。缺点是无法记录需要状态记录的事务操作。

HTTP 协议是可扩展的,后来发明的 Cookie 技术,给 HTTP 增加了“记忆能力”。

 

 

什么是cookie

cookie来源于计算机编程里的术语『magic cookie』,意思是不透明的数据。

Cookie 是服务器委托浏览器存储的一些数据,让服务器有了“记忆能力”;

早期的cookie直接就是磁盘上的一些小的文本文件,现在通常是以数据库记录的形式存放(一般是sqlite)。浏览器对cookie的 大小和数量也有限制,不允许无限存储,一般大小不超过4k。

 

 

cookie的工作过程

需要用到响应头字段:Set-Cookie和请求头字段Cookie

1、客户端第一次请求时,没有cookie信息,服务器收到后响应报文里返回cookie信息。在头字段Set-Cookie中以key-value键值对存储

2、客户端收到响应后,若Set-Cookie字段不为空,则将Cookie信息存在本地(一般是浏览器中),下一次请求时会将存储的Cookie信息放到头字段Cookie中发送给服务器,多个键值对中间用“;”隔开

3、服务器再一次收到请求后,通过Cookie字段就能识别出该次请求的身份信息

 

 

Cookie的属性

cookie的生存周期

Cookie 的有效期可以使用 Expires 和 Max-Age 两个属性来设置。

Expires:过期时间,是一个绝对时间点,截止日期

Max-Age:用的是相对时间,单位是秒,浏览器用收到报文的时间点再加上 Max-Age,就可以得到失效的绝对时间。

Expires 和 Max-Age 可以同时出现,两者的失效时间可以一致,也可以不一致,但浏览器会优先采用 Max-Age 计算失效期。

 

Cookie 的安全性

HttpOnly:属性“HttpOnly”会告诉浏览器,此 Cookie 只能通过浏览器 HTTP 协议传输,禁止其他方式访问,浏览器的 JS 引擎就会禁用 document.cookie 等一切相关的 API,脚本攻击也就无从谈起了。

SameSite:可以防范“跨站请求伪造”(XSRF)攻击,设置成“SameSite=Strict”可以严格限定 Cookie 不能随着跳转链接跨站发送,而“SameSite=Lax”则略宽松一点,允许 GET/HEAD 等安全方法,但禁止 POST 跨站发送。

Secure:表示这个 Cookie 仅能用 HTTPS 协议加密传输,明文的 HTTP 协议会禁止发送。但 Cookie 本身不是加密的,浏览器里还是以明文的形式存在。

 

 

cookie的应用

Cookie 最基本的一个用途就是身份识别,保存用户的登录信息,实现会话事务。

比如,你用账号和密码登录某电商,登录成功后网站服务器就会发给浏览器一个 Cookie,内容大概是“name=yourid”,这样就成功地把身份标签贴在了你身上。

之后你在网站里随便访问哪件商品的页面,浏览器都会自动把身份 Cookie 发给服务器,所以服务器总会知道你的身份,一方面免去了重复登录的麻烦,另一方面也能够自动记录你的浏览记录和购物下单(在后台数据库或者也用 Cookie),实现了“状态保持”。

Cookie 的另一个常见用途是广告跟踪。

网站的页面里会嵌入很多广告代码,里面就会访问广告商,在浏览器里存储广告商的cookie。

你换到其他网站,上面也有这个广告商的广告代码,因为都是一个广告商网站,自然就能够读取之前设置的cookie,也就获得了你的信息。

比如 某个网站插入了谷歌的广告,用户加载谷歌广告后(访问的是谷歌的服务器,自然下发了谷歌的cookie), 那么下次用户去其他有谷歌广告的网站上网,这次请求广告会带上之前谷歌的cookie, 谷歌就可以根据这个cookie中的信息来推荐广告给用户

 

 

cookie的缺点

(1) 不安全。如果被中间人获取到 Cookie,完全将它作为用户凭证冒充用户。解决方案是使用 https 进行加密。
(2)有数量和大小限制。另外 Cookie 太大也不好,传输的数据会变大。
(3)客户端可能不会保存 Cookie。比如用 telnet 收发数据,用户禁用浏览器 Cookie 保存功能的情况。

 

 

问答

1、如果 Cookie 的 Max-Age 属性设置为 0,会有什么效果呢?

答:如果 Max-Age 设置为0,浏览器中该 Cookie 失效,即便这个 Cookie 已存在于浏览器中,且尚未过期。另外 Web 应用开发中,可以通过这种方式消除掉用户的登陆状态,此外记得在服务器的 session 中移除该 cookie 和其对应的用户信息。

 

2、Max-age:-1 的时候会永久有效吧 ?

答:rfc里有说明,如果max-age <=0,统一按0算,立即过期。

 

3、既然max-age=0会立即失效,那不就等于无记忆了?那干嘛还用cookie?

答:max-age=0是指不能缓存,但在会话期间是可用的,浏览器会话关闭之前可以用cookie记录用户的信息。

推荐这些文章:

django 学习(七)—— 使用Cookie和session实现登录

需求:通过Cookie和Session实现admin登录成功后,在页面显示“嘿,admin你好!”
Cookie机制:Cookie分发通过扩展HTTP协议来实现,服务器通过在HTTP的响应头中加上一行特殊的指示来提示浏览器按照指示生成相应的Cookie。
      Cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器。
      浏览器检查所有存储的Cookie,如果某个Cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该Cookie附在请求资源的HTTP请求头上发送给服务器。
      缺点:存在一定的安全隐患(浏览器中会保存所有的用户信息)
Sessio...

Servlet学习5 -- cookie和session

一.会话技术

基本概念
会话就类似于正常生活中的双方打电话,有一方拿起手机,拨号,另一方接听,然后进行通话,最后结束电话,在web端,就是客户端(浏览器)发出请求,服务器收到请求,发回响应,最后关闭浏览器,在这段时间内产生的多次请求和响应,合起来就叫做浏览器和服务器之间的一次会话。

功能
在一次会话中的多次请求间共享数据。
比如记录用户登陆信息,有些网站在用户第一次登陆时会显示“欢迎来到本网站”,当第二次登入时,则会显示“欢迎回来”,为什么服务器能知道用户已经登录过该页面?原因就是在于服务器会话时保存了一些数据,服务器通过这些数据来判断是否登陆过,从而做出不同的响应。

分类

客...

Cookie 和 Session区别(简单理解)

区别:
cookie 数据是存放在客户的浏览器上的,session数据是放在服务器上
cookie 安全性相比session较低,可将登录信息等重要信息存放在session,其他信息需要保存,可以放在cookie
由于session会在一定时间内保存在服务器上。访问增多时,会比较占用服务器的性能,考虑到减轻服务器性能方面建议使用cookie
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

...

关于Cookie与Session状态的一点疑问。

问题
当一个没有禁用cookie的浏览器请求一个web站点,当前页面使用了Session状态,会有一个带唯一标示符的cookie随页面返回到浏览器,可以使Session状态在页面切换时继续跟踪用户,而当关闭浏览器后,再去请求该站点的相同页面,为什么获取不到原来的Session状态?根本原因是什么?难道是因为每次打开浏览器返回站点时,随页面返回的cookie是属于会话cookie?

最佳回答
记录SessionID的cookie存在浏览器的进程中,浏览器关闭了SeesionID也就随之丢失了。
再开一个浏览器肯定是没法向服务器发送之前的...

jmeter中HTTP Cookie Manager

当登录脚本涉及到一些 重定向,写起来比较复杂的时候,可以手工登录后,任意抓取一个请求,然后将cookie填到这里用
不过要特别注意,Domain中要写上对应的域
 

 
 
 

...

mvc使用FormsAuthentication存储身份信息,请问为什么在Global.asax.cs中获取的身份信息Cookie没有过期时间

问题

我的网站使用FormsAuthentication进行身份信息的存储验证
在HomeController中,创建Tickt,然后加密存储Cookie,如图:
存储之后,通过监视可以看到Cookie的信息一切正常(尤其注意Expires和HttpOnly),如图:
然后登陆完成之后,在Global中获取Cookie验证登陆状态,如图:
发现虽然能获取到Cookie,但是Cookie的一些属性值不对,如图:
尤其是Expires和HttpOnly,这两个属性是我明确设置过的,但是确显示的默认值
当然,在浏览器中查看Cookie,是正常的,如图(请忽略值不对应...

《手把手教你》系列技巧篇(六十三)-java+ selenium自动化测试 - cookie -上篇(详细教程)

1.简介
 前边介绍了三种截图方法,各有各的优点吧,今天宏哥主要是介绍一下cookie。Cookie内记录用户名和密码(加密)信息,只要请求时服务器收到Cookie,识别成功,默认为已登陆,今天通过本文给大家分享Selenium对Cookie的操作方法。
2.Cookie介绍
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。举个例子:用户A购买了一件商品放入购物车内,当再次购买商品时,服务器...

C# http返回Cookie以后使用

public static string GetCookie(string requestUrlString, Encoding encoding, ref CookieContainer cookie)
{
//向服务端请求
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(requestUrlString);
myRequest.ContentType = "application/x-www-form-urlencoded";...

文章标题:http学习 cookie
文章链接:https://www.dianjilingqu.com/51554.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>