在C#中处理编码的Cookie值
作者:互联网
根据RFC 2109,cookie的值“对于用户代理而言是不透明的,并且可能是原始服务器选择发送的任何内容,可能采用服务器选择的可打印ASCII编码.”
因此,即使原始值相同,不同的语言/平台/服务器也会发送不同的cookie值.
例如,C#/ ASP.NET按原样发送文本;经典的ASP urlencode和urldecode文本; Perl / Apache urlencodes / decods文本(但与ASP不同!). PHP为您提供了选择.
我正在编写一个单点登录系统,该系统需要与完全不同的应用程序共享cookie.特别是我需要开箱即用地支持.NET,Java,Perl,ColdFusion.
我存储在cookie中的文本始终是有效的ASCII-7字符串.尽管如此,Perl还是喜欢编码一些7位ASCII字符.
我看到两种主要的替代方法可以使这项工作:
>仅接受非编码值.毕竟没有必要对它们进行编码.目前就是这样.显然,所有集成系统都必须能够支持非编码值.
>接受编码值和非编码值.这将允许开箱即用的最大兼容性,但是我将需要确定是否对特定值进行了编码(这听起来是完全不可能的:“”文字“”字符串还是空格?)
您会建议哪种解决方案,为什么?如果是#2,您将如何检测UrlEncoded文本?
Cookie的示例(我添加了换行符以使其适合)
A5A2794D694241AD92F9B22F288EFAA1|8428DCCC|20090821142732|20090821142832|
10.100.107.40|955098D50AB4982D4E247EFA53F4E23B32A05ED0131E096709BE1D8CCC
8A3CA18252D376473C244FD71C462AB42CF54C
解决方法:
有什么原因不能提供纯字母数字值?如果您要保留不透明的二进制数据,则可以使用十六进制或使用“网络安全” base64.
您越不可能使任何人都弄乱您的cookie,IMO就越好.
标签:cookies,cross-platform,single-sign-on,c 来源: https://codeday.me/bug/20191107/2003099.html