我正在尝试使用 Perl 但不使用 CGI 或任何其他框架来创建一个标准论坛风格的网站。我之前见过一个名为“cookies.pl”的脚本,但找不到任何有关它的文档。有没有一种方法可以仅使用核心模块来设置/读取 cookie?
首先,我假设当您说不想使用“CGI”时,您指的是 Perl 模块,CGI.pm
而不是由该模块实现的与 Web 服务器通信的通用网关接口 (CGI) 方法CGI.pm
。
其次,本回答仅供参考和娱乐。尝试实现您自己的 CGI 处理程序以在生产环境中使用是不可取的。除非你确切地知道自己在做什么,否则这是一个非常非常糟糕的主意。即使你这样做了,可能仍然是一个坏主意。如果您确实知道自己在做什么,则不必询问有关界面基本部分的问题,例如如何实现 cookie 处理。
排除所有这些因素后,直接处理 cookie 就非常简单了。
Set-Cookie
HTTP 标头发送到客户端。在最基本的形式中,这看起来像Set-Cookie: CookieName=CookieValue
. 还有许多其他选项可以添加到此基本格式中,这些选项记录在网络上的各个位置。如果您现在想知道“如何发送 HTTP 标头?”,则在第一个空行之前发送到客户端(即print
to )的每一行文本都是 HTTP 标头:STDOUT
print "Content-Type: text/html\n"; # Content-Type header is mandatory!
print "Set-Cookie: CookieName=CookieValue\n"; # Header to set a cookie
print "\n"; # Blank line = end of headers
# continue on with sending the response body now that headers are done
Run Code Online (Sandbox Code Playgroud)
HTTP_COOKIE
,该环境变量由 Web 服务器作为其 CGI 实现的一部分提供,并将包含通过客户端 HTTP 请求接收到的所有 cookie 的分号分隔列表。在 Perl 中可以将其访问为$ENV{HTTP_COOKIE}
.