如何在服务器端使用Perl中的CGI来取消cookie的值?

如何在服务器端使用Perl中的CGI来取消cookie的值?,perl,cookies,cgi,return-value,comma,Perl,Cookies,Cgi,Return Value,Comma,我正在尝试使用Perl中的CGI将cookie值中由逗号分隔的单词列表发送回浏览器,但逗号符号始终转换为%2C: top%2Cchay%2Cpisi 代码如下: $ud = 'top,chay,pisi'; $cookie_ud = CGI::Cookie->new( -name => 'ud', -value => $ud, -expires => '+25y' ); print "Set-Cookie: $cookie_ud\n"; 我这样

我正在尝试使用Perl中的CGI将cookie值中由逗号分隔的单词列表发送回浏览器,但逗号符号始终转换为%2C:

top%2Cchay%2Cpisi
代码如下:

$ud        = 'top,chay,pisi';
$cookie_ud = CGI::Cookie->new(
-name    => 'ud',
-value   => $ud,
-expires => '+25y'
);
print "Set-Cookie: $cookie_ud\n";
我这样做是因为我必须将这些数据传递给我尚未开发的程序。 如何避免在服务器端应用程序中转义逗号?我希望cookie的值等于top,chay,pisi,而不是top%2Cchay%2Cpisi。
提前感谢。

CGI::Cookie将Cookie呈现为字符串时,会自动转义Cookie名称和值中的任何特殊字符。它没有提供任何禁用或绕过此功能的方法,因为尽管cookie规范不要求转义,但cookie规范规定服务器不应发送包含未转义逗号和其他字符的cookie。另外,这只是一个很好的安全实践

如果您确实需要发送包含未扫描原始数据的cookie,并且不建议这样做,那么您需要在打印cookie字符串之前取消扫描cookie字符串

use CGI::Util 'unescape';
print "Set-Cookie: " . unescape "$cookie_ud" . "\n";

您是否确实确定客户端没有正确处理转义的逗号?如果没有,则是客户端中的错误。Cookie值应该是url转义的,并且在有效Cookie中特别禁止使用未转义的逗号:

:


是的,逗号是转义的,其他特殊字符也是转义的。你的问题是什么?当列表进入浏览器时,我不想让逗号转义。我对Perl中的CGI是新手,怎么做?我无法更改客户端应用程序。啊,现在有一个问题……如果你需要在浏览器中取消转义,你必须在javascript中完成。
cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
                   ; US-ASCII characters excluding CTLs,
                   ; whitespace DQUOTE, comma, semicolon,
                   ; and backslash