在 HTTP 服务器中处理 cookie

Handling cookies in an HTTP server

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

到目前为止一切顺利,但我无法向浏览器发送 cookie。

我想我不明白我的服务器在发送 cookie 之前应该如何解析 document-output(从读取文件到通过 HTTP 发送)。我已经搜索了几天,却一无所获。可能我是 over-complicating 这个,但我怎么知道文档请求发送的键值是什么?

仅搜索使用 HTTP::Cookies 从网络解析文档的登陆页面,这不是我要找的。服务器端在发送 header 之前解析 "Set-Cookie:" 的本地文档会发生什么?

我试过 HTTP::Cookies->extract_cookies($my_local_file),但它返回

"Can't locate object method "_header" via package..."

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

当浏览器向网络服务器发送请求时,header 可能包含一个 cookie 行。这是网络浏览器将它的 cookie 连同网络请求一起呈现给网络服务器。该请求可能如下所示:

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

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

HTTP::Server::Simple 是一个 drop-in CPAN 库,它提供了一个 fully-functioning 网络服务器,如果你不想重新发明轮子的话。

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

I suppose I don't understand how my server is supposed to parse the document-output (from reading the file to send via HTTP) before sending for cookies.

Likely I am over-complicating this, but how am I supposed to know what key value the document is requesting to send?

What happens on the server side to parse a local document for "Set-Cookie:" before it sends the headers?

服务器不会“发送 cookie”。当服务器收到来自客户端的 HTTP 请求时,它会构建并发送包含客户端请求的信息的响应。该响应可能包括 Set-Cookie headers 以指示客户端保存一些信息

文档不能“请求发送”键值——它只是一个文档!——而且没有“本地文档的解析”。 =48=]。服务器简单地添加 headers 来定义如果客户端向同一主机发送另一个请求时它想要返回的数据

如果要求简单那么每个数据项都可以出现在headers中。例如

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

但是如果服务器想要存储大量与 session(可能是购物篮的内容)相关的信息,那么这可能只是一个 session ID,对应于服务器上包含所有相关数据的 MySQL 数据库记录的 ID

Set-Cookie: session_id=76151387

此方法还提高了安全性,因为只有 session ID 出现在 HTTP 消息中,所有真实数据都保存在服务器站点之外

一旦客户端收到响应,它将以任何它喜欢的方式保存 cookie,以便在下一个请求指向相同的主机地址时可以检索并返回它们。它只会包含来自先前响应的数据副本,如下所示

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

Cookie: session_id=76151387

这个基本想法有多种变体;例如,服务器可以指定一个 ExpiresMax-Age 字段来指定客户端何时删除 cookie。假设服务器发送

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

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

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