在没有 CGI 的情况下在 Perl 中使用 cookie

Using cookies in Perl without CGI

我正在尝试使用 Perl 创建一个标准论坛样式的网站,但不使用 CGI 或任何其他与此相关的框架。我在使用简单标题为 "cookies.pl," 的脚本之前看到过,但找不到任何类型的文档。有没有办法 set/read 仅包含核心模块的 cookie?

首先,我假设当您说您不想使用 "CGI" 时,您指的是 Perl 模块 CGI.pm 而不是通用网关接口 (CGI) 通信方法Web 服务器,由 CGI.pm 模块实现。

其次,本回答仅供参考和娱乐。尝试实现您自己的 CGI 处理程序以用于生产环境是不可取的。除非您确切地知道自己在做什么,否则这是一个非常非常糟糕的主意。即使你这样做,也可能仍然是一个坏主意。而且,如果您确切地知道自己在做什么,就不必询问有关界面基本部分的问题,例如如何实现 cookie 处理。

排除所有这些,直接处理 cookie 非常简单。

  • 要设置 cookie,请向客户端发送 Set-Cookie HTTP header。在最基本的形式中,这看起来像 Set-Cookie: CookieName=CookieValue。还有许多其他选项可以添加到这个基本格式中,documented 在网络的各个地方。

如果您现在想知道 "How do I send an HTTP header?",您发送给客户端的每一行文本(即 printSTDOUT)在第一个空行之前是一个HTTP header:

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
  • 要读取 cookie,请查看环境变量 HTTP_COOKIE,该变量由 Web 服务器作为其 CGI 实现的一部分提供,将包含一个 semicolon-delimited 列表,其中包含使用客户端的 HTTP 请求。这在 Perl 中作为 $ENV{HTTP_COOKIE}.
  • 访问