создание постоянного файла cookie с форумской аутентификацией - PullRequest
1 голос
/ 16 ноября 2009

Я делаю следующее во время входа в систему, но кажется, что вход в систему вообще не сохраняется:

FormsAuthentication.SetAuthCookie(userId.ToString(), true);

1 Ответ

2 голосов
/ 29 апреля 2010

Вы столкнулись с ошибкой, что MS вызывает недокументированную функцию безопасности.

Чтобы установить постоянный файл cookie, вам нужно создать его самостоятельно и явно указать срок действия. Единственная хитрость заключается в том, чтобы получить значение тайм-аута FormsAuthentication, которое, по их бесконечной мудрости, Microsoft не раскрывает с 1.0. Я предоставил свой метод для получения этого значения.

Вот рабочий пример.

Login.aspx

<%@ Page Language="C#" %>

<script runat="server">

    protected void Login1_LoggedIn(object sender, EventArgs e)
    {
        var login = (Login)sender ;

        if (login.RememberMeSet)
        {
            // hack to get forms timeout - it is not publicly surfaced anywhere. 
            var tmpTicket = FormsAuthentication.GetAuthCookie("foo", true);
            var timeout = tmpTicket.Expires;

            // create a new ticket
            FormsAuthenticationTicket ticket =
            new FormsAuthenticationTicket(2, login.UserName, DateTime.Now, timeout, true, "", FormsAuthentication.FormsCookiePath);


            string ticketEncrypted = FormsAuthentication.Encrypt(ticket);

            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticketEncrypted)
            {
                HttpOnly = true,
                Path = FormsAuthentication.FormsCookiePath,
                Secure = FormsAuthentication.RequireSSL,
                Expires = ticket.Expiration
            };

            Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
            Response.Cookies.Add(cookie);
        }
    }

</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Login ID="Login1" runat="server" OnLoggedIn="Login1_LoggedIn">
        </asp:Login>
    </div>
    </form>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...