检查当前登录的用户是否具有持久性authcookie

时间:2011-10-29 09:35:47

标签: c# asp.net cookies persistence forms-authentication

我需要在当前登录用户的FormsAuthentication AuthCookie中编辑userdata。我不知道如何确定当前用户是否选择了持久性cookie(“记住我”)。

//user is already logged in...

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, ispersistant); //how to I determine 'ispersistant'?

FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);

FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, NEWuserdata);

authCookie.Value = FormsAuthentication.Encrypt(newTicket);

HttpContext.Current.Response.SetCookie(authCookie);

有人有任何想法吗? 感谢

3 个答案:

答案 0 :(得分:7)

FormsAuthentication.GetAuthCookie方法只会创建一个新Cookie。它不会让你获得早先制作的cookie。

在您的登录页面上,您可能会遇到以下情况:

FormsAuthentication.GetAuthCookie (userID, chkPersistCookie.Checked)

要知道用户何时通过身份验证,您可以

this.Context.User.Identity.IsAuthenticated

我实际上不确定您是否可以推断出用户具有持久身份验证Cookie的事实。有一件事是检查cookie的有效期。

在此question中,有一个用于读取身份验证Cookie的示例。

答案 1 :(得分:7)

这应该检索现有的表单auth cookie,检查票证,并判断它是否持久。

        var FormsAuthCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
        var ExistingTicket = FormsAuthentication.Decrypt(FormsAuthCookie.Value);
        bool IsPersistent = ExistingTicket.IsPersistent;

答案 2 :(得分:2)

我最终在登录时在authcookie的userdata属性中存储了“ispersistant”。

相关问题