asp.net - BASE64 编码的 Cookie 无法正确发送到服务器

标签 asp.net cookies asp.net-web-api

我使用BASE64来编码GUID值并将它们添加到cookie中。例如,编码的 GUID 值为 vClFwpDbWE6JPUlnlBXMWg==。当服务器发送响应时,它会添加这个cookie。我检查了 Chrome,浏览器正确接收了该值。但是当浏览器发送另一个请求时,HttpRequestMessage的cookie中的cookie值被更改为“vClFwpDbWE6JPUlnlBXMWg”,为什么有些字符被删除了?

我使用 WebAPI2、MVC5 和 IIS7.5。

最佳答案

ASP.NET 在 cookie 中看到“=”字符并假定它是多值 cookie(请参阅相关问题 Storing multiple values in cookies)。

最好的办法是将 GUID 按原样存储在 cookie 中,例如,使用 Guid.ToString() 将 GUID 转换为十六进制字符串,然后使用 new Guid(string) 将十六进制字符串转换回 GUID 。或者,如果您确实需要将其压缩为 BASE64,请考虑使用 HttpServerUtility 的 UrlTokenEncodeUrlTokenDecode方法。这些方法使用的编码与 BASE64 非常相似,但不使用 ASP.NET 专门处理的“+”和“=”等字符。

关于asp.net - BASE64 编码的 Cookie 无法正确发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26336989/

相关文章:

c# - 比较两个相同的字符串列表

asp.net - 跨多个回发存储对象的方法

javascript - 删除 Cookie

security - HTTP cookies 端口特定吗?

javascript - ASP.NET web方法获取带有参数的ajax

c# - 结果类型未知的任务

c# - 如何配置空 ASP .NET 应用程序以将其发布到 IIS

asp.net - 将自动完成方法放在单独的 Web 文件中?

http - 无法通过 Go API 在客户端中设置 cookie

c# - 具有 WebAPI OData 属性路由的 $Metadata 不工作