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
【讨论】:
恐怕没有帮助。我添加了:<machineKey decryption="Auto" validation="AES" validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" />
我还尝试添加了不起作用的手动键。
我在这里生成我的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 不会持续存在的主要内容,如果未能解决你的问题,请参考以下文章