Cookie二三事(actually more)

Cookie是什么

Cookie在英文中是小甜品的意思,但在计算机语言中,Cookie指的是当你浏览某网站时,网站存储在你电脑上的一个小文本文件, 伴随着用户请求和页面在 Web 服务器和浏览器之间传递。它记录了你的用户ID,密码、浏览过的网页、停留的时间等信息, 用于用户身份的辨别。Cookie通常是以user@domain格式命名的,user是你的本地用户名,domain是所访问的网站的域名。

为什么要Cookie

因为HTTP协议是无状态的,对于一个浏览器发出的请求,服务器无法区分是不是同一个来源,无法知道上一次用户做了什么。 所以,需要额外的数据用于维护会话。 Cookie 正是这样的一段随HTTP请求一起被传递的额外数据,用于维护浏览器和服务器的会话。我们可以想象一个场景, 你没有登录京东时在京东上购物,选择了3件商品放入购物车,在结算时,京东为什么还能知道这三件商品是什么? 没错,是Cookie!

Cookie的工作原理

Cookie利用网页代码中的HTTP头信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。例如:当你在浏览器地址栏中键入 了Amazon的URL,浏览器会向Amazon发送一个读取网页的请求,并将结果在显示器上显示。在发送之前,该网页在你的电脑上 寻找Amazon网站设置的Cookie文件,如果找到,浏览器会把Cookie文件中的数据连同前面输入的URL一同发送到Amazon服务器。 服务器收到Cookie数据,就会在他的数据库中检索你的ID,你的购物记录、个人喜好等信息,并记录下新的内容,增加到数据库 和Cookie文件中去。如果没有检测到Cookie或者你的Cookie信息与数据库中的信息不符合,则说明你是第一次浏览该网站,服务 器的CGI程序将为你创建新的ID信息,并保存到数据库中。(此例子来源于百度百科——Cookie)

关于Cookie的一些知识点

  1. Cookie是基于浏览器的,因此当电脑上安装多个浏览器时,服务器会生成多个Cookie。虽然是同一个人,但服务器是识别为多个用户。
  2. Cookie是基于浏览器的,因此当同一台电脑有多个人使用时,服务器也只会生成一个Cookie。虽然是多个人,但服务器会认为是一个用户。
  3. Cookie是无法跨设备进行设置的。比如我们在单位和家里分别使用两台电脑,即使我们使用同一种同一版本的浏览器,我们还是生成了两个Cookie, 服务器会认为是两个用户。(PS:现在有些浏览器可以同步数据,比如Chrome、Friefox,可以避免这种问题)
请注意:以上所说的Cooke指的全部是Http Cookie。有一种Cookie——Flash Cookie,可以解决多浏览器的问题。

关于Flash Cookie

FlashCookie是由FlashPlayer控制的客户端共享存储技术,鉴于目前Flash技术的普遍性,几乎所有的网站都采用, 所以具有同Http Cookie一样的作用。在技术上,通过使用JavaScript与ActionScript可以将Http Cookie和Flash Cookie进行互通。

Flash cookie的优势在于:

  1. 跨浏览器
    不管用户的计算机上安装了多少个浏览器或者浏览器的不同版本,使用Flash Cookie能够使所有的浏览器共用一个Cookie。
  2. 不易删除
    所有的浏览器均提供了清除Http Cookie的快捷方式,但Flash Cookie并没有此种方式,并且其保存位置非常隐蔽,网民难以删除。
  3. 容量更大
    Flash Cookie可以容纳最多100千字节的数据,而一个标准的HTTP Cookie只有4千字节。

Cookie的数量

  1. 大多数浏览器支持最大为 4096 字节的 Cookie。因此最好用 Cookie 来存储用户 ID 之类的标识符,用户的详细信息则通过用户 ID从数据库或其他数据源中读取。
  2. 浏览器还限制站点可以在用户计算机上存储的 Cookie 的数量。大多数浏览器只允许每个站点存储 20 个 Cookie;当存储更多 Cookie时, 最旧的 Cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为300 个。

Cookie的失效时间

  1. 浏览器的Cookie设置会决定是否保存Cookie数据。如果浏览器不允许Cookie保存,则关掉浏览器后,这些数据就消失。
  2. 如果浏览器允许保存Cookie,那么Cookie的时间由服务器的设置决定。Cookie有一个Expires(有效期)属性,这个属性 决定了Cookie的保存时间,服务器可以通过设定Expires字段的数值,来改变Cookie的保存时间。如果不设置该属性,那么Cookie只 在浏览网页期间有效,关闭浏览器,这些Cookie自动消失,绝大多数网站属于这种情况。通常情况下,Cookie包含Server、Expires、 Name、value这几个字段,其中对服务器有用的只是Name和value字段,Expires等字段的内容仅仅是为了告诉浏览器如何 处理这些Cookies。

Cookie的位置

1、Http Cookie的位置

Windows 9X系统 C:WindowsCookies
Windows NT/2000/XP系统
C:\Documents and Settings\用户名\Cookies
win7系统
C:\Users\*\AppData\Roaming\Microsoft\Windows\Cookies\*
OS X系统
~/Users/用户名/Library/Cookies

2、Flash Cookie的位置

非Win7系统
C:\Documents and Settings\[username你的用户名]\Application Data\Macromedia\Flash Player\#SharedObjects
Win7
C:\Users\[username你的用户名]\Application Data\Macromedia\Flash Player 其中:Users可能显示为“用户”

OS X系统
~/Users/用户名/Library/Preferences/Macromedia/Flash Player/#SharedObjects
~/Users/用户名/Library/Preferences/Macromedia/Flash Player/macromedia.com/support/flashplayer/sys/

第一方Cookie和第三方Cookie

大多数的第三方监测工具和网站分析工具都会采用第三方Cookie。所谓第一方和第三方的说法,是用来确定Cookie的归属的, 这个归属是指Cookie中记录的域(domain)。第一方和第三方的唯一区别只是:Cookie中的域名是否和被访问网站的域一样, 是就是第一方,否就是第三方。举个例子:如果你访问网站www.chinawebanalytics.cn的时候,网站在你的电脑上设置了一 个Cookie,里面的记录的域名也是www.chinawebanalytics.cn,那么这个Cookie就是第一方的,归你访问的 网站www.chinawebanalytics.cn所有。而如果你访问网站www.chinawebanalytics.cn时,在你的计算机中设置的Cookie的 域名是www.abc.com,那么这个Cookie就是第三方Cookie,归www.abc.com所有。

所以,第一方Cookie并不一定需要由某个网站自己的服务器给自己建立,别的网站也能为它建立;而且,第一方Cookie也不 一定是能由某个网站自己读取的,它完全可能由第三方读取。(以上内容和例子来自于捍卫Cookie——没有Cookie,我们什么都没有了)

bonus~

本来来源于360doc(链接点我),然而,由于360doc不登录就不能复制文章内容,所以我写了个爬虫提取了一下原文,源码如下:
#coding:utf-8
#一个小脚本,可以把360的文章下载下来然后提取出文章正文,去掉html标签,对付360文章不登陆不能复制的设置
url = 'http://www.360doc.com/content/12/1012/21/7662927_241124973.shtml'
import requests

response = requests.get(url)

#print response.content
from bs4 import BeautifulSoup as bs
import re
soup = bs(response.content)

article = soup.find('div',class_ = 'entry-content')
regex = re.compile('\<.*?\>')
art = regex.split(str(article))
for i in art:
    print str(i).strip()
上面的代码有个问题,由于只是简单的提取文章内容,因此结果没有文中的图片,而且,url也是我写死的,没有普适性,如果谁有兴趣改进的话,可以写个界面,带输入url的输入框,并加上下载图片的设置。