Cookie与Session的历史、原理、结构、分类、应用以及区别
Cookie部分
Cookie的历史与原理
Cookie(即“小甜饼”)是一种用于在Web浏览器和Web服务器之间传递信息的技术。Cookie最早由美国的李维·蒙塔利(Lou Montulli)于1994年发明,它是通过在HTTP响应中添加一个Set-Cookie字段来设置的。当浏览器收到此响应时,它将存储这个Cookie,并在后续的HTTP请求中将其发送回服务器。
Cookie的原理非常简单:当用户访问一个网站时,服务器会将一个Cookie发送给用户的浏览器。浏览器会将这个Cookie存储在本地,并在用户下一次访问该网站时将其发送回服务器。通过这种方式,服务器可以记住用户的偏好、登录状态等信息。
Cookie的分类与结构
按照用途,Cookie可以分为 会话Cookie
和持久Cookie
。会话Cookie通常保存在内存中,当用户关闭浏览器时就会被删除。而持久Cookie则会保存在硬盘上,直到过期时间到达或用户手动删除才会被删除。
每个Cookie都由一个名字、一个值、一些元数据(如过期时间、域名、路径等)组成。例如,下面是一个名为“username”的Cookie:
Set-Cookie: username=john; expires=Tue, 11 Jun 2019 00:00:00 GMT; domain=example.com; path=/
这个Cookie的值为“john”,过期时间为2019年6月11日,域名为example.com,路径为根目录。
Cookie的应用
Cookie是Web开发中非常重要的一个概念,它可以用于以下几个方面:
-
记住用户的登录状态:当用户登录后,服务器可以将一个持久Cookie发送给浏览器,包含用户的登录凭证。当用户下一次访问该网站时,浏览器会将这个Cookie发送回服务器,服务器可以通过这个Cookie来识别用户并自动登录。
-
存储用户的偏好:例如,网站可以保存用户的语言偏好、主题偏好等信息,以便下一次访问时能够提供更好的用户体验。
-
跨域访问:由于同源策略的限制,网站A无法直接读取网站B的Cookie。但是,如果两个网站共享同一个父域名,则可以通过设置Cookie的domain属性来实现跨域访问。
-
跟踪用户的行为:通过设置Cookie,网站可以跟踪用户的访问记录、购买记录等行为,以便进行数据分析、广告投放等。
参考文献
HTTP Cookies - Mozilla Developer Network
Cookies - W3Schools
HTTP cookies - Wikipedia
PHP服务端设置以及客户端的文件形式及内容
在PHP中,可以使用setcookie()函数来设置Cookie。例如,以下代码会创建一个名为“username”的Cookie,过期时间为7天,值为“john”:
setcookie('username', 'john', time() + 60 * 60 * 24 * 7, '/');
在客户端,Cookie通常以文本文件的形式存储在浏览器的Cookie目录下。例如,在Google Chrome中,Cookie文件通常位于“C:\Users
Cookie文件通常以SQLite数据库
的形式存储,可以使用SQLite浏览器等工具来查看和编辑Cookie。
例如,以下是一个名为“username”的Cookie的数据:
name: username
value: john
domain: example.com
path: /
expires_utc: 1559692800
is_secure: 0
is_httponly: 0
其中,expires_utc
表示过期时间(以UNIX时间戳表示),is_secure
和is_httponly
分别表示是否仅限HTTPS和是否禁止JavaScript访问Cookie。