我们使用以下代码来创建安全cookie。在Staging环境中一切正常,但在生产环境中,以下代码无法在Safari,Chrome或IE中创建cookie,但它确实在Firefox中成功创建了cookie。你们认为我错过了什么或者在这里错了什么?
public static void SetAuthenticationCookie(CustomIdentity identity)
{
ConfigSettings configSettings = ConfigHelper.GetConfigSettings();
string cookieName = configSettings.CookieName;
if (cookieName == null || cookieName.Trim() == String.Empty)
{
throw new Exception("CookieName entry not found in Web.config");
}
string cookieExpr = configSettings.CookieExpiration.ToString();
string encryptedUserDetails = Encrypt(identity);
HttpCookie userCookie = new HttpCookie(cookieName.ToUpper());
if (cookieExpr != null && cookieExpr.Trim() != String.Empty)
{
userCookie.Expires = DateTime.Now.AddMinutes(int.Parse(cookieExpr));
}
userCookie.Values["UserDetails"] = encryptedUserDetails;
userCookie.Values["Culture"] = configSettings.Customer.Culture;
MyContext.Current.Response.Cookies.Add(userCookie);
}
答案 0 :(得分:7)
Safari和IE8默认不接受第三方Cookie。
当您使用JSONP呼叫另一个域时,该脚本设置的每个cookie都将被Safari和IE8阻止。你无能为力(在IE8中,你可以添加一个P3P策略,但这在Safari中不起作用)。
有关于在JSONP调用中维护状态的解决方法,但它非常复杂(您必须手动管理状态并在调用的javascript中使用document.cookie)
作为替代方案,您可以要求您的用户降低浏览器中的隐私设置,但这不是值得考虑的恕我直言。
答案 1 :(得分:0)
您是否检查过您是否拥有Web Developer附加组件和禁用Cookie?或在FF内禁用cookie?
答案 2 :(得分:0)
我看到此问题与服务器的UTC日期/时间不正确有关。无论服务器日期/时间如何,Firefox都会接受,但如果日期/时间超出一定误差范围,则其他浏览器不会设置cookie。