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会话变量。有什么想法吗?
答案 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
。使用其中之一,而不是两者。