Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中处理编码的cookie值#_C#_Cookies_Cross Platform_Single Sign On - Fatal编程技术网

C# 在C语言中处理编码的cookie值#

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的值“对于用户代理是不透明的,可能是源服务器选择发送的任何内容,可能是服务器选择的可打印ASCII编码。”

因此,即使原始值相同,不同的语言/平台/服务器也会发送不同的cookie值

例如,C#/ASP.NET按原样发送文本;经典ASP URL编码和URL解码文本;Perl/ApacheUrl对文本进行编码/解码(但不同于ASP!)。Php为您提供了这个选项

我正在编写一个单点登录系统,它需要与不同的应用程序共享一个cookie。尤其是.NET、Java、Perl和ColdFusion,这些都需要开箱即用的支持

我存储在cookie中的文本始终是有效字符串。然而,例如,Perl喜欢对一些7位ASCII字符进行编码

我认为有两个主要的替代方案可以实现这一目标:

  • 仅接受非编码值。毕竟,没有必要对它们进行编码。这就是目前的情况。显然,所有集成系统必须能够支持非编码值

  • 接受编码和非编码值。这将允许最大限度的开箱即用兼容性,但我需要确定是否对特定值进行了编码(这听起来很不可能:是“%20”文本“%20”字符串还是空格?)

  • 您会建议哪种解决方案?为什么?如果是#2,您将如何检测URL编码的文本?


    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