在IE和Chrome上无法创建cookie

时间:2012-08-06 12:51:08

标签: asp.net cookies cross-browser

我们有一个需要cookie的aspx页面才能启动。在重定向到该页面之前,我们创建了cookie,然后在响应中给出,然后重定向到页面。

Form form = new Form { 
            FormID = dalObject.FormID, 
            PageName = dalObject.PageName, 
            ViewPageName = dalObject.ViewPageName };

        HttpCookie cookie = new HttpCookie("FormCookie");
        cookie.Expires = DateTime.Now.AddMinutes(1);

        if (dalObject.FormID==(int)Forms.SP_APP_FORM)
        {
            cookie.Values.Add("ApplicationRepositoryID",GetEncryptedToken(applicationRepositoryID.ToString()));
            cookie.Values.Add("UserDirectoryID", GetEncryptedToken(userDirectoryID.ToString()));
            cookie.Values.Add("FormID", GetEncryptedToken(dalObject.FormID.ToString()));

            if (applicationFormID.HasValue)
                cookie.Values.Add("ApplicationFormID", GetEncryptedToken(applicationFormID.ToString()));
        }
        form.PageCookie = cookie;
        return form;

问题是在开发环境中它工作得很好,在生产中它也在工作(对他们来说),但是如果我们尝试生产站点,它就不起作用(来自我们的开发计算机)。我们怀疑cookie没有被创建。这发生在开发的3台计算机中的2台上。其中一个正在运作。 我们试图删除cookie,清除缓存,但没有结果。

有什么想法吗? 感谢

1 个答案:

答案 0 :(得分:0)

我以前在我们的网站上看过这个。在我们的例子中,客户端和服务器时钟彼此明显不同步。服务器设置到期时间,客户端根据自己的时钟进行检查,如果超过(在您的情况下)一分钟,则会立即过期。

我们将cookie的到期时间设置得更远(比如一周或一个月),然后只在服务器上进行检查(因为它应该检查自己)。基本上,我们向cookie添加了额外的数据(手动到期时间),服务器可以使用它来进行检查。如果它已经过了你的计算(你设置的那一分钟),那么服务器会删除(并忽略)它发送的cookie。

我不知道这是否是问题的最佳解决方案,但它对我们有用。

顺便说一下,我们只在IE上发现了这个问题。