0

我正在使用以下代码进行自定义“记住我”的暗示:

        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, member.UserName, DateTime.Now, DateTime.Now.AddHours(24), true, dataString);
        string encTicket = FormsAuthentication.Encrypt(ticket);
        HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
        faCookie.Expires = ticket.Expiration;
        HttpContext.Current.Response.Cookies.Add(faCookie);

但是有些用户无法登录(即使登录后也会出现登录页面)。
似乎问题是由于客户端的日期与服务器的日期不同(更大)引起的。那么,对于“记住我”的实现来说,最好和正确的解决方案是什么。
为了解决这个问题,我必须删除这一行:

faCookie.Expires = ticket.Expiration;

删除此行后,当用户关闭浏览器时,他必须登录(cookie 不持久)。解决办法是什么?

4

1 回答 1

0

您可以做的是获取客户端日期/时间并将其用于 Cookie,而不是服务器时间。

这里有一个很好的答案,向您展示了一个很好的方法;基本上用客户日期/时间填充一个隐藏字段并在回发时获取它。

您可以在母版页上有这个隐藏字段,以便客户的日期/时间始终可用。不需要只是在登录屏幕上。

于 2013-01-01T21:25:54.830 回答