您误解了 cookie 的工作原理。它们由服务器指定并存储在客户端上,所以这个问题没有意义
我想我不明白我的服务器在发送 cookie 之前应该如何解析文档输出(从读取文件以通过 HTTP 发送)。
可能我过于复杂了,但是我应该如何知道文档要求发送的关键值?
在服务器端解析本地文档以获取“Set-Cookie:”之前会发生什么情况,然后再发送标头?
服务器不会“发送 cookie”。当服务器接收到来自客户端的 HTTP 请求时,它会构建并发送包含客户端请求的信息的响应。该响应可能包含Set-Cookie
指示客户端保存一些信息的标头
文档不能“请求发送”键值——它只是一个文档!——也没有“解析本地文档”。如果客户端向同一主机发送另一个请求,服务器只需添加定义要返回的数据的标头
如果要求很简单,那么每个数据项都可以出现在标题中。例如
Set-Cookie: localtime=2016-05-18T09:01:16
Set-Cookie: username=Keith
但是,如果服务器想要存储与会话相关的大量信息(可能是购物篮的内容),那么这可能只是一个会话 ID,它对应于服务器上保存的 MySQL 数据库记录的 ID,其中包含所有相关数据
Set-Cookie: session_id=76151387
这种方法还提高了安全性,因为只有会话 ID 出现在 HTTP 消息中,所有真实数据都保存在服务器的站点外
一旦客户端收到响应,它将以它喜欢的任何方式保存 cookie,以便在下一个请求是到相同的主机地址时可以检索并返回它们。它将仅包含来自先前响应的数据的副本,如下所示
Cookie: localtime=2016-05-18T09:01:16; username=Keith
或者
Cookie: session_id=76151387
这个基本思想有一些变化。例如,服务器可以指定Expires
一个字段或Max-Age
字段,该字段指定客户端何时删除 cookie。假设服务器发送
Set-Cookie: session_id=76151387; Max-Age=86400
然后 cookie 将被保存到磁盘,以便在重新启动浏览器时保持不变,并在一天后删除(期限以秒为单位指定)。如果没有这些属性中的任何一个,cookie 就是一个会话 cookie,它通常保存在内存中,并且会在浏览器关闭时被删除
服务器可能会指定其他更深奥的属性。RFC 6265是 HTTP cookie 系统的权威规范,详细描述了各个方面