2

IE 工作正常,但 FireFox 不行。

我在我的 default.aspx 页面上设置了一个 cookie:

    HttpCookie hc = new HttpCookie("guid", guid.ToString());
    hc.Expires = DateTime.Parse("12/12/2010");
    Response.Cookies.Add(hc);

我的上传控件(我正在使用 SWFUpload)提交到 upload.aspx。

在 upload.aspx 上,我调用:

    if (Request.Cookies["guid"] != null)
    {
       // Do something.
    }

...我的 cookie 只包含我的 ASP.NET 会话变量。有任何想法吗?

4

4 回答 4

3

尝试通过我的 Flex 应用程序在 Firefox 中上传文件时,我遇到了同样的问题。如果你也在使用 Flash,你可能想做我所做的;如果您使用的是 HTML 控件,这可能适用也可能不适用。

我为解决 Firefox 问题所做的工作是在服务器上发出一次性使用令牌,然后在上传时发布该令牌(例如,它可能是表单中的隐藏字段)。如果在上传时识别到令牌,则处理上传,然后令牌过期。所以这基本上就是你正在做的事情,只是不使用cookie。

于 2010-02-11T22:26:35.050 回答
1

这就是我用来添加/获取 cookie 值的方法。在 IE 和 FF 中都适用于我

添加Cookie:

HttpCookie c = new HttpCookie("myCookie");
c.Expires = new DateTime(2050, 1, 1);
c.Values.Add("key", "value");

获取饼干:

string value = Request.Cookies["myCookie"]["key"];
于 2010-02-11T15:14:24.350 回答
1

在幕后,您可能两次设置相同的 cookie。Firefox 和 IE 可能在选择保留哪一个方面有所不同。ASP.NET 喜欢在许多 Web 应用程序中自动设置“guid”cookie。通过选择该名称,您必然会在自动逻辑和您自己的逻辑之间产生张力。查看正在发生的事情的最佳方法是将Live HTTP Headers加载项加载到 Firefox。它将允许您准确查看发送给最终用户的 cookie 命令。你也可以强制一个类似的问题来重新创建它:

HttpCookie hc = new HttpCookie("testcookie", "xyz");
hc.Expires = DateTime.Parse("12/12/2010");
Response.Cookies.Add(hc);
hc = new HttpCookie("testcookie", "abc");
Response.Cookies.Add(hc);

Set-Cookie这会产生一个带有两个调用的 HTTP 标头:

Set-Cookie: testcookie=xyz; expires=Sun, 12-Dec-2010 07:00:00 GMT; path=/
Set-Cookie: testcookie=abc; expires=Sun, 12-Dec-2010 07:00:00 GMT; path=/

从那里,由浏览器决定是第一个还是最后一个是最终值。如果两个浏览器的做法不同,您最终会遇到您描述的情况。安装 Live HTTP Headers 插件并寻找类似的东西。至少,您可能应该将“guid”视为您应该在 ASP.NET 表单应用程序中使用的 cookie 名称。

如果您绝对需要在多个地方设置相同的 cookie,请先尝试找到它(如果不存在则创建一个新的)。这将确保您覆盖现有 cookie 的值,而不是创建另一个具有相同名称的 cookie。

HttpCookie hc = Response.Cookies["testcookie"];
if (null == hc) {
    hc = new HttpCookie("testcookie");
    Response.Cookies.Add(hc);
}
hc.Value = "xyz";
于 2010-02-11T15:32:08.443 回答
0

首先,有一个类型安全的构造函数DateTime,即new DateTime(2010, 12, 12).

其次,您为 cookie 使用了不同的名称:guidvs applicationGuid。使用其中之一,而不是两者。

于 2010-02-11T14:46:13.200 回答