4

ASP.NET MVC 4 アプリケーションで独自のものを作成しようとしていFormsAuthenticationますが、authcookie を作成する 2 つの異なる方法を見てきましたが、そのうちの 1 つに欠点があるのか​​、それとも両方を使用しても安全なのか疑問に思っていました。ウィッチの使用を決める前に知っておくべきその他の違いはありますか?

最初のものは

FormsAuthentication.SetAuthCookie(userName, rememberMe);

もう一つは少し長いです

            var authTicket = new FormsAuthenticationTicket(
            1,
            userName,
            DateTime.Now,
            DateTime.Now.AddMinutes(30),
            rememberMe,
            "Users"
            );
        var encryptedTicket = FormsAuthentication.Encrypt(authTicket);

        var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
        HttpContext.Current.Response.Cookies.Add(authCookie);

この決定について教えてください

4

2 に答える 2

3

実際には、最初のメソッドが 2 番目のメソッドを呼び出します。これを示すためにソースを取得しましたが、SetAuthCookie関連性を保つためにいくつかの行を削除しました。

public static void SetAuthCookie(string userName, bool createPersistentCookie)
{
    FormsAuthentication.Initialize();
    FormsAuthentication.SetAuthCookie(userName, createPersistentCookie, FormsAuthentication.FormsCookiePath);
}

public static void SetAuthCookie(string userName, bool createPersistentCookie, string strCookiePath)
{
    (...)
    HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, createPersistentCookie, flag ? "/" : strCookiePath, !flag);
    (...)
    HttpContext.Current.Response.Cookies.Add(authCookie);
    (...)
}

private static HttpCookie GetAuthCookie(string userName, bool createPersistentCookie, string strCookiePath, bool hexEncodedTicket)
{
    (...)
    DateTime utcNow = DateTime.UtcNow;
    DateTime expirationUtc = utcNow.AddMinutes((double) FormsAuthentication._Timeout);
    FormsAuthenticationTicket ticket = FormsAuthenticationTicket.FromUtc(2, userName, utcNow, expirationUtc, createPersistentCookie, string.Empty, strCookiePath);
    string str = FormsAuthentication.Encrypt(ticket, hexEncodedTicket);
    (...)
    HttpCookie httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, str);
    (...)
    return httpCookie;
}
于 2012-04-05T06:55:38.940 に答える
1

2つ目が最適です。ユーザーデータを送信したり、有効期限を設定したりできるためです。

私もこれだけを使っています...それはうまく機能しています..

于 2012-04-05T06:39:39.530 に答える