在HTTP服务器中处理cookie



这是我第一次在这个网站上发帖,但我经常来。我被困在一个我正在编码的项目上。我是Perl的新手,所以请放心。我已经成功地用Perl编写了一个web服务器,它解析PHP并处理多个连接。

到目前为止,一切都很好,但我一直在向浏览器发送cookie。

我想我不明白我的服务器在发送cookie之前应该如何解析文档输出(从读取文件到通过HTTP发送)。我找了好几天都没找到。我可能过于复杂了,但我该如何知道文档请求发送的关键值?

使用HTTP::Cookies只搜索解析web文档的着陆页,这不是我想要的。在发送标头之前,服务器端会发生什么来解析本地文档的"Set Cookie:"?

我试过HTTP::Cookies->extract_cookies($my_local_file),但它以响应

无法通过包定位对象方法"_header"…

这是有道理的,因为头文件从未发送过,因为它发生在服务器端。

您误解了cookie的工作方式。它们由服务器指定存储在客户端上,所以这个问题没有意义

我想我不明白我的服务器在发送cookie之前应该如何解析文档输出(从读取文件到通过HTTP发送)。

我可能过于复杂了,但我该如何知道文档请求发送的关键值?

在服务器端发生了什么来解析本地文档以获得";设置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。它将简单地包括来自先前响应的数据的副本,就像这个

Cookie: localtime=2016-05-18T09:01:16; username=Keith

Cookie: session_id=76151387

这一基本观点有不同之处;例如,服务器可以指定指定客户端何时删除cookie的ExpiresMax-Age字段。假设服务器发送

Set-Cookie: session_id=76151387; Max-Age=86400

然后cookie将被保存到磁盘,以便在浏览器重新启动时保持不变,并在一天后删除(期限以秒为单位)。如果没有这两个属性,cookie就是会话cookie,它通常保存在内存中,当浏览器关闭时会被删除

服务器可能会指定其他更深奥的属性RFC 6265是HTTP cookie系统的最终规范,它详细描述了的各个方面

当浏览器向web服务器发送请求时,标头可能包含cookie行。这是一个网络浏览器,将其cookie与网络请求一起提供给网络服务器。请求可能如下所示:

GET /index.html HTTP/1.1
Host: YourURL.com
Cookie: key=value; key=value; key=value

如果要解析到服务器的原始请求,请解析cookie行中的值。

HTTP::Server::Simple是CPAN库中的一个插件,如果您不想重新发明轮子,它可以提供一个功能齐全的web服务器。

最新更新