Cookie 不会持续存在

Posted

技术标签:

【中文标题】Cookie 不会持续存在【英文标题】:Cookie doesn't persist 【发布时间】:2011-02-22 23:59:47 【问题描述】:

我的 cookie 有问题。我通过 LDAP 对用户进行身份验证,只要浏览器保持打开状态,用户就不必重新登录该工具。只要浏览器打开,他们甚至可以关闭标签页。

但是,当用户关闭浏览器时,cookie 就会被删除。我已经为此搜索了很多谷歌,但我无法获得任何解决方案,例如 this one 或 that one。

这是他们在我的登录页面上进行身份验证后的设置:

String encryptedTicket = FormsAuthentication.Encrypt(authTicket);

//Create a cookie, and then add the encrypted ticket to the cookie as data.
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

//Add expiration date to the cookie
authCookie.Expires = DateTime.Now.AddMonths(1);

//Add the cookie to the outgoing cookies collection.
Response.Cookies.Add(authCookie);

//You can redirect now.
FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, false);

我的 Web.Config 如下所示:

<authentication mode="Forms"> <forms loginUrl="Logon.aspx" timeout="43200" name="adAuthCookie" path="/" slidingExpiration="true" /> </authentication>

无论我做什么,ASP.NET_SessionId 和 adAuthCookie cookie 总是设置为“当我关闭浏览器时”过期。 我想避免我的用户在关闭浏览器时总是必须登录,而是每月只登录一次。

【问题讨论】:

您的authTicket 是什么样的?您使用的是什么会员服务提供商? authTicket 看起来很正常,CookiePath 为“/”,Expired false,IsPersistent true 等...我能看到的唯一奇怪的事情是到期日期设置为 1 小时后。至于会员提供者,我对此仍然很陌生,但我不相信在这种情况下我会使用它。 【参考方案1】:

听起来您需要在 web.config 中设置 machineKey。 如果此处或 machine.config 均未指定,则会在启动时生成并在每次网站重新启动时重置,从而使 cookie 中的加密无效。

machineKey element

【讨论】:

恐怕没有帮助。我添加了:&lt;machineKey decryption="Auto" validation="AES" validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" /&gt; 我还尝试添加了不起作用的手动键。 我在这里生成我的http://aspnetresources.com/tools/machineKey 确保格式正确。不过,这已经耗尽了我的想法。 谢谢,我试过了,但还是不行。我也将protection="All" 添加到WebConfig 的表单部分,但这并没有什么区别。 Cookie 的到期日期仍设置为“浏览器关闭时”。【参考方案2】:

确保浏览器未设置为在关闭时删除 cookie。在安全选项中有这样的偏执设置(我认为在 IE 中它是高级 -> 安全 -> 空临时文件夹...)

使用 Fiddler 或其他工具确保您向浏览器发送具有正确过期时间的 cookie。这样您就可以验证错误是服务器端还是客户端。

【讨论】:

浏览器未设置为在关闭时删除 cookie。至于到期,我可以看到实际上 ASP.NET_SessionId 的正确到期日期设置为一个月后。但是由于某种原因,adAuthCookie 没有。 “但由于某种原因,adAuthCookie 没有”听起来像是对您所看到的行为的解释。这很奇怪——在 authCookie 上设置 cookie 过期的代码看起来没问题。您确定这是添加此 cookie 的唯一代码吗? 对不起,我花了这么长时间才回复。是的,这是唯一影响此 cookie 的代码。我仍然有这个问题:/ 我不知道 - 你的 sn-p 代码看起来不错。另一个随机猜测 - 当您查看 Fiddler 时,是否只有一个带有 set-cookie 标头的响应中的“adAuthCookie”?

以上是关于Cookie 不会持续存在的主要内容,如果未能解决你的问题,请参考以下文章

离子本地存储不会持续存在

重新启动浏览器后,我的cookie不会保留

Laravel 5.2 - 会话不会在路由更改中持续存在

用户登录后 Laravel 5 会话不会持续存在

关闭 AVPlayerViewController 不会“杀死”对象 - 它会持续存在

使用 LINQ to XML 删除属性不会持续存在