2

我是唯一支持混合了经典 asp 和 .NET 的网站的开发人员。我不得不将一些 .net 页面添加到经典的 asp 应用程序中。此应用程序需要用户登录。登录页面以经典 asp 编写,创建一个 cookie,.net 页面使用该 cookie 来识别登录用户,并将信息存储在会话变量中以供其他经典 asp 页面使用。在经典的 asp 中,cookie 代码如下:

response.cookies("foo")("value1") = value1
response.cookies("foo")("value2") = value2
response.cookies("foo").Expires = DateAdd("N", 15, Now())
response.cookies("foo").Path = "/"

在 .NET 代码隐藏 Page_Load 代码中,我使用下面的代码检查 cookie。

if(!IsPostBack) {
if(Request.Cookies["foo"] != null) { ... } else { //重定向到cookie创建页面,cookiefoo.asp } }

绝大多数情况下,这都没有问题。但是,我们有一些用户被重定向到 cookie 创建页面,因为 Page_Load 代码找不到 cookie。无论用户被重定向到 cookie 创建页面多少次,引用页面仍然可以找到 cookie,foo。问题发生在 IE7 中,我尝试修改浏览器中的隐私和 cookie 设置,但似乎无法重现用户遇到的问题。

有谁知道为什么 IE7 会发生这种情况?

谢谢。

4

7 回答 7

2

使用Fiddler是尝试弄清楚发生了什么的好方法。您可以看到浏览器获取的确切 Set-Cookie。

于 2008-09-23T16:49:35.517 回答
1

关于 cookie 可能很难调试的一件事是,当涉及到域时,cookie 是区分大小写的。因此,如果用户键入“www.abc.com/dir1/Alpha/”,则无法从代码访问为“www.abc.com/dir1/alpha/”发布的 cookie。

在 ASP.NET 页面中要注意的另一件事是

Page.Response.Redirect("~/alpha");

ASP.NET 会根据实际文件路径的大小写修改相对 URL 的大小写。如果您的目录结构中有混合大小写,请使用

Page.Response.Redirect(Page.ResolveUrl("~/alpha").ToLower());
于 2010-05-25T17:31:20.770 回答
0

跨平台 cookie 测试的一般规则:将所有 cookie 转储到屏幕上,以便您查看数据。它可能无法准确解释它发生的原因,但它应该告诉您正在发生的事情。

于 2008-09-23T16:50:15.267 回答
0

好的第二个答案:如果它是一小部分用户,您可能想查看他们在计算机上安装了哪些软件。在他们所有的机器上可能有一个常见的反间谍软件/广告软件应用程序会弄乱您的 cookie。

如果您无法从这些用户那里得到答案,或者没有任何疑问,那么可能值得创建一个特殊的小测试脚本来编写一个 cookie 并将结果在下一个页面加载时发回给您。

你想让它尽可能简单(加载链接后没有用户交互),所以让它:

  1. 在经典 ASP 中设置 cookie
  2. 重定向到另一个 ASP 页。
  3. 阅读 cookie 并将其通过电子邮件发送给您。
  4. 重定向到 ASPNET 页。
  5. 阅读 cookie 并通过电子邮件发送。

您可能还想在 ASPNET 中设置一个 cookie 并尝试将其读回。

于 2008-09-23T17:00:43.633 回答
0

如果 IE7 隐私设置设置为阻止第一方 cookie,则您发布的代码应该会中断。你在实验中尝试过吗?

正如 Lou 所说,使用 Fiddler 是一个好主意,尽管 Set-Cookie 响应标头不如后续 Cookie 请求标头有趣,以查看客户端是否将它们转发到服务器。

于 2008-09-24T20:42:56.713 回答
0

我记得这发生在我写的一个类似的应用程序中;一些页面是经典的 ASP,而另一些是 ASP.NET。cookie 似乎在 .NET 和经典 ASP 页面之间消失了。

IIRC,.NET 端需要 Server.HTMLEncode/HTMLDecode cookie。对不起,但我没有我使用的确切代码,但这应该会让你朝着正确的方向前进。

于 2008-09-27T05:43:11.393 回答
0

几十年后(这肯定值得一枚奖牌)

对我来说,这是cookie key 中的特殊字符

具体来说,引起我注意的是一个带有钥匙的饼干utlização,它总是像null.

因此,我们.Replace("ç", "c").Replace("ã", "a")在生成 cookie 密钥时添加了故障保护。它修复了它。

cookie 一直显示在浏览器中,因此需要一段时间才能观察到这种模式。谢谢女士。

于 2020-08-26T15:31:56.343 回答