C# 在C语言中处理编码的cookie值#
根据,cookie的值“对于用户代理是不透明的,可能是源服务器选择发送的任何内容,可能是服务器选择的可打印ASCII编码。” 因此,即使原始值相同,不同的语言/平台/服务器也会发送不同的cookie值 例如,C#/ASP.NET按原样发送文本;经典ASP URL编码和URL解码文本;Perl/ApacheUrl对文本进行编码/解码(但不同于ASP!)。Php为您提供了这个选项 我正在编写一个单点登录系统,它需要与不同的应用程序共享一个cookie。尤其是.NET、Java、Perl和ColdFusion,这些都需要开箱即用的支持 我存储在cookie中的文本始终是有效字符串。然而,例如,Perl喜欢对一些7位ASCII字符进行编码 我认为有两个主要的替代方案可以实现这一目标:C# 在C语言中处理编码的cookie值#,c#,cookies,cross-platform,single-sign-on,C#,Cookies,Cross Platform,Single Sign On,根据,cookie的值“对于用户代理是不透明的,可能是源服务器选择发送的任何内容,可能是服务器选择的可打印ASCII编码。” 因此,即使原始值相同,不同的语言/平台/服务器也会发送不同的cookie值 例如,C#/ASP.NET按原样发送文本;经典ASP URL编码和URL解码文本;Perl/ApacheUrl对文本进行编码/解码(但不同于ASP!)。Php为您提供了这个选项 我正在编写一个单点登录系统,它需要与不同的应用程序共享一个cookie。尤其是.NET、Java、Perl和ColdFu
cookie示例(我添加了换行符以使其适合)
是的,这不是一个小问题。从根本上说,我更倾向于解决方案2,因为它是最具互操作性的。然而,正如您所说,检测哪些cookie是URL编码的,哪些不是URL编码的,这是一个非常重要的问题
我想到的一件事是,您可以使用一些特殊字符填充Cookie值的开头,这样您就可以检测Cookie是否已编码。当然,这可能不包括所有客户端,但例如,如果您的正常cookie值的形式为
CookieValue1234
,则可以将其更改为头:CookieValue1234
,并检查其中的空格是否会返回URL编码(即返回为“%20
”或者作为“”)。有什么原因不能使用纯字母数字值吗?如果您试图保存不透明的二进制数据,则可以使用十六进制或“web安全”base64
你越不可能让任何人乱动你的饼干,我就越好。我已经在使用HEX了。唯一的非字母数字字符是用于分隔字段的管道字符——这就是perl编码的内容。另一方面,任何字符都可以在其他平台下进行编码。你永远不知道:)我想如果你坚持字母数字,那就好了。只需使用X作为分隔符而不是|。这绝对是最安全的解决方案,如果您还想测试多个编码,您可以放置多个测试字符。
A5A2794D694241AD92F9B22F288EFAA1|8428DCCC|20090821142732|20090821142832|
10.100.107.40|955098D50AB4982D4E247EFA53F4E23B32A05ED0131E096709BE1D8CCC
8A3CA18252D376473C244FD71C462AB42CF54C