如何强制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
相关产品推荐
相关产品推荐

