ASP.NET帮助! FireFox正在吃我的饼干!

时间:2010-02-11 14:43:52

标签: asp.net firefox session cookies swfupload

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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

这是我用来添加/获取cookie值的内容。适用于IE和FF的

的addCookie:

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

的getCookie:

string value = Request.Cookies["myCookie"]["key"];

答案 2 :(得分: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);

这导致HTTP标头包含两个Set-Cookie个调用:

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";

答案 3 :(得分:0)

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

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