You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制CGI为Cookie值添加双引号?

如何让Perl CGI生成带双引号包裹值的Cookie?

先看演示用的Perl代码:

use strict;
use warnings;

use CGI qw /:standard/;
use MIME::Base64;

# ...

my $cookie = cookie( -name    => 'token',
                     -value   => '"' . encode_base64($token, '') . '"',
                     -expires => '+1y',
                   );

print header( -status    => 302,
              'Location' => $uri,
              -cookie    => $cookie,
            );

当前脚本生成的HTTP头中,Set-Cookie的格式不符合预期——token的值没有被正确的双引号包裹,反而出现了转义后的特殊字符。

我们期望得到的格式是:

Set-Cookie: token="lrv5Jy5KhkXb8qIWpgd3bA=="; path=/; expires=...

解决方法

问题出在你手动给token值添加了"转义字符。CGI模块的cookie函数会自动处理Cookie值的编码和格式化,包括根据规范添加引号并处理转义。

只需要去掉手动拼接的",直接传入Base64编码后的token值即可:

my $cookie = cookie( -name    => 'token',
                     -value   => encode_base64($token, ''),
                     -expires => '+1y',
                   );

原因说明

当你手动加入"时,CGI模块会把这些字符当作值的一部分进行转义,最终导致Cookie头里出现"(转义后的转义符),而非预期的"。让CGI模块负责值的格式化,它会按照Cookie规范自动处理引号包裹和必要转义,生成符合要求的Set-Cookie头。

内容的提问来源于stack exchange,提问作者Ωmega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:01:12