谁动了你的cookie

本文详细解析了Cookie的概念及其在网络中的作用,包括其如何帮助服务器维护用户的登录状态,并解释了它与HTTP协议的关系以及潜在的安全风险。

谁动了你的cookie

 

呵呵,标题只是为了好玩。

 

最近好几个人问我,cookie到底是什么,能不能用通俗的语言解释一下。他们只知道cookie的字面意思是小甜饼,似乎与安全隐私有关。至于cookie的具体用途,全然不知。这个小甜饼与网络如何扯上关系,似乎风马牛不相及的事情。

 

实际上,有些命名规则,是说不清道不明的,一定置身于作者所在的文化背景下,才能体会作者的深意。比如,Java为什么叫Javagoogle为什么叫googleapache为什么叫apache,如此等等,如果当事人不给点提示,我们是无法知道这些名字来历的。

 

抛开小甜饼还是小咸饼不谈,我们先解释一下cookie的功能吧。这要从HTTP协议说起,HTTP是一种无状态协议,即按HTTP协议本身要求,前后两次请求是没有依赖关系的,比如你先浏览哪个网页,再浏览哪个网页,HTTP协议本身是不作限制的。这也正常,协议只提供机制,而不提供策略,完全是情合理的。

 

问题在于现实不同于理想,在实际应用中,一些请求是有依赖关系的,最常见的信箱、论坛和博客等,只有登录成功后,才能使用它的全部功能。登录了,你才能收发邮件,才能发贴子,才能写博客。服务器就需要知道你是否登录了,这个信息就是状态,即登录状态。

 

这个矛盾如何解决呢?如何在无状态的协议上实际有状态的服务呢?得有一种方法才行,这种方法就是cookie,说白了,cookie就是WEB服务器保存客户端(即浏览器)中的状态信息,在后面请求中,浏览器会把这些信息回传给WEB服务器,WEB服务器通过这些cookie检查是否登录过了。当然cookie不限于保存登录信息,它只是一种技术手段,服务器想用它保存什么都行,看需要而定。

 

Cookie为什么会涉及到安全问题呢?这是显而易见的,虽然一般cookie都是经过加密处理过的,正如保险箱里的钱未必是保险的一样,加密后的信息未必不能被泄露。对于设计得不好的服务器程序来说,cookie可以直接被非法利用。

 

既然把cookie放在客户端(即浏览器)会有安全隐患,为什么不把这些状态放在服务器上呢?其实,这也是迫不得已的,这种做法从技术实现上考虑,没有丝毫困难。但是在现实中行不通,你想想,一个网站可能被数以千万的用户使用,有的状态信息可能要保存数月之久,这要保存多少信息!这种做法开销太大。

 

服务器在请求客户端(即浏览器)保存信息时,在下传的HTTP响应头中包含Set-Cookie字段,在客户端(即浏览器)回传信息给服务器时,在HTTP请求头中包含Cookie字段。

 

Cookie的格式为:

key1=value1;key2=value2; expires=...; domain=...; path=...; secure

l         key1=value1;key2=value2;代表服务器所要保存的有效数据。

l         expires表示cookie的生命期,过期之后就无效了,比如有的网站要求你过一段时间后重新登录,就是通过它来实现的。

l         Domainpath表示cookie的作用范围,即在哪些网网页上有效。

l         Secure表示该cookie是不是只适用于HTTPS的请求。

 

下面是一个例子:

telnet www.google.com 80

HEAD /intl/zh-CN/ HTTP/1.1

Host: www.google.com

 

 

HTTP/1.1 200 OK

Cache-Control: private

Content-Type: text/html

Set-Cookie:PREF=ID=2595b468a53b7221:NW=1:TM=1145015023:LM=1145015023:S=iASetSIzh8_sHPue; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com

Server: GWS/2.1

Content-Length: 0

Date: Fri, 14 Apr 2006 11:43:43 GMT

 

### 关于巨潮资讯网Cookie的处理方法 在处理像巨潮资讯网这样的网站时,Cookie通常用于验证用户的会话状态以及防止机器人攻击。以下是针对该问题的具体分析: #### Cookie的作用 Cookie是由服务器生成并返回给客户端的一组数据,在后续请求中会被自附加到HTTP头中以维持会话状态[^1]。对于某些需要登录或者频繁更新内容的服务来说,Cookie尤为重要。 #### 获取和维护Cookie的方法 为了成功抓取目标网页的数据,可以通过以下方式来管理Cookies: 1. **通过`requests.Session()`对象保持连接**: 使用Python中的`requests`库创建一个Session实例可以帮助我们更方便地管理和重用同一个TCP连接下的多个请求之间的Cookies。 ```python import requests session = requests.Session() response = session.post(url_query, headers=headers, params=params) cookies_dict = session.cookies.get_dict() # 提取当前session内的所有cookie ``` 2. **手解析响应中的Set-Cookie字段**: 如果希望更加灵活控制哪些具体的key-value对应该加入下次请求,则可以直接读取Response Headers里的'Set-Cookie'键值,并将其转换成适合的形式再赋值回Header里去。 3. **模拟浏览器行为加载JavaScript脚本产生的额外Cookie**: 部分现代Web应用依赖前端框架执行复杂的逻辑计算得出最终版token作为新的认证依据之一;此时单纯依靠传统的爬虫工具可能无法满足需求,因此推荐采用Selenium WebDriver或者其他支持渲染页面的技术栈完成自化操作流程。 以上三种策略可以根据实际情况单独运用亦或是组合起来达到最佳效果[^2]。 ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com/login') # 登录过程省略... selenium_cookies = driver.get_cookies() for cookie in selenium_cookies: session.cookies.set(cookie['name'], cookie['value']) ``` ### 注意事项 当遇到反爬措施较强劲的目标站点时,请务必遵循其robots.txt文件规定以及其他公开声明条款合法合规开展工作。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值