【发布时间】:2010-11-11 00:55:30
【问题描述】:
一个域可以在访问者的网络浏览器上生成多个 cookie 吗? 如果是这样,当用户访问网站时,哪些 cookie 将被传送到服务器?为什么一个网站会生成多个 cookie?
我检查了我的谷歌浏览器的 Cookies 设置,发现有多个 nytimes.com 的 cookie。
如果服务器想在 cookie 中存储多个键/值对,它们不能存储在同一个 cookie 中吗?
【问题讨论】:
一个域可以在访问者的网络浏览器上生成多个 cookie 吗? 如果是这样,当用户访问网站时,哪些 cookie 将被传送到服务器?为什么一个网站会生成多个 cookie?
我检查了我的谷歌浏览器的 Cookies 设置,发现有多个 nytimes.com 的 cookie。
如果服务器想在 cookie 中存储多个键/值对,它们不能存储在同一个 cookie 中吗?
【问题讨论】:
是的:)
我推测这些 cookie 是由网站的不同组件创建的,这些组件是由不同的开发团队创建的。我们所有人都应该意识到,当我们需要完成一些开发但没有时间等待协作或其他团队为我们开发必要的层时,通常会出现这种情况。
来自维基百科:
主要浏览器的每个域最大存储 cookie 的相关计数是:
- Firefox 3.0:50
- 歌剧 9:30
- Internet Explorer 7:50
【讨论】:
当您编写程序时,您是否只使用一个变量?不,对吧?
这里的原理相同 - cookie 只是您的程序(服务器/客户端)可以使用的键/值对。
【讨论】:
一个域可以在访问者的网络浏览器上生成多个 cookie 吗?
是的。确切的限制取决于浏览器,Internet Explorer used to accept 20 but increased this to 50。
如果是这样,当用户访问网站时,哪些 cookie 将被传送到服务器?
所有的
为什么一个网站会生成多个 cookie?
这样您就不需要在一个 cookie 中序列化所有数据(可能来自系统的不相关部分)。
【讨论】:
是的,一个域可以生成许多 cookie。浏览器最大数量varies。
【讨论】:
-每个站点都可以根据需要创建任意数量的 cookie。 (但它接缝可能因浏览器而异)
-当用户访问网站时,所有活动的 cookie 都会被发送。
-使用多个 cookie 来存储单独的数据是有意义的。在一个极端的比较中,将 cookie 与类进行比较;)
【讨论】:
cookie 只是一个键/值对,具有可选的域、路径、过期和访问设置。
将数据分成单独的 cookie 的原因包括:
secure; httpOnly;,而保存 UI 首选项的 cookie 仍然可以通过 javascript 访问。path 属性,这样就不会在不需要的页面上不必要地发送它们。【讨论】:
服务器可以指定任意数量的 cookie,每个 cookie 都在其自己的 Set-Cookie 标头中指定。
每个Set-Cookie 标头至少包含CookieName=CookieValue 对,除了secure 或httpOnly 属性之外,还可能包含其他key=value 对。这些附加对和属性是引用实际 cookie 的元数据,不能用于设置附加 cookie。
当客户端将 cookie 发送回服务器时,它会将它们全部组合成一个 Cookie 标头。这是可能的,因为客户端从不发回元数据,只发回 cookie 名称和值。
考虑这个 HTTP 交换:
GET / HTTP/1.1
Host: www.example.com
HTTP/1.1 302 Found
Location: http://www.example.com/index.html
Set-Cookie: UserID=12345; Expires=Wed, 09 Jun 2021 10:18:14 GMT; domain=.example.com;path=/index.html; httpOnly`
Set-Cookie: SessionID=6478; domain=.example.com;path=/index.html; httpOnly
Set-Cookie: foo=bar
GET /index.html HTTP/1.1
Host: www.example.com
Cookie: UserID=12345; SessionID=6478; foo=bar
【讨论】: