我有一個標準的ASP.NET MVC(RC刷新)Web項目,與標準的ASP.NET成員資格提供程序和項目模板中包含的帳戶控制器。「記住我」與ASP.NET MVC身份驗證不起作用
當我在登錄表單中選中「記住我」時,我仍然沒有被網站記住。 (Firefox會記住我的用戶名和密碼,但我希望發生的事情是自動登錄)。
我必須手動設置和檢查cookie嗎?如果是這樣,最好怎麼辦?
我有一個標準的ASP.NET MVC(RC刷新)Web項目,與標準的ASP.NET成員資格提供程序和項目模板中包含的帳戶控制器。「記住我」與ASP.NET MVC身份驗證不起作用
當我在登錄表單中選中「記住我」時,我仍然沒有被網站記住。 (Firefox會記住我的用戶名和密碼,但我希望發生的事情是自動登錄)。
我必須手動設置和檢查cookie嗎?如果是這樣,最好怎麼辦?
您需要將true/false傳遞給SetAuthCookie方法。
public ActionResult Login (string email, string password, bool rememberMe, string returnUrl)
{
// snip
FormsAuth.SetAuthCookie(username, rememberMe); // <- true/false
// snip
}
,並確保bool rememberMe
反映複選框的登錄頁面上的狀態。
您需要在控制器方法中生成一個持久性cookie,以便在選中記住我時處理登錄。如果您使用的是RedirectFromLoginPage
,請將createPersistentCookie參數設置爲true
。
這3種方法幫助我堅持了一個cookie。
請注意,如果用戶取消選擇「記住我」,則需要刪除該Cookie。
private const string RememberMeCookieName = "MyCookieName";
private string CheckForCookieUserName()
{
string returnValue = string.Empty;
HttpCookie rememberMeUserNameCookie = Request.Cookies.Get(RememberMeCookieName);
if (null != rememberMeUserNameCookie)
{
/* Note, the browser only sends the name/value to the webserver, and not the expiration date */
returnValue = rememberMeUserNameCookie.Value;
}
return returnValue;
}
private void CreateRememberMeCookie(string userName)
{
HttpCookie rememberMeCookie = new HttpCookie(RememberMeCookieName, userName);
rememberMeCookie.Expires = DateTime.MaxValue;
Response.SetCookie(rememberMeCookie);
}
private void RemoveRememberMeCookie()
{
/* k1ll the cookie ! */
HttpCookie rememberMeUserNameCookie = Request.Cookies[RememberMeCookieName];
if (null != rememberMeUserNameCookie)
{
Response.Cookies.Remove(RememberMeCookieName);
rememberMeUserNameCookie.Expires = DateTime.Now.AddYears(-1);
rememberMeUserNameCookie.Value = null;
Response.SetCookie(rememberMeUserNameCookie);
}
}
我現在使用下面的代碼創建cookie。 if(rememberMe) HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName,true); cookie.Expires = DateTime.Now.Add(new TimeSpan(30,0,0,0)); Response.Cookies.Add(cookie); } 我該如何檢查是否有一個有效的cookie與請求? – 2009-02-05 00:33:37
我想如果你得到一個有效的會話cookie,用戶將被設置在HttpContext中,並且它們不會被AuthorizationAttribute定向到你的登錄頁面。 – tvanfosson 2009-02-05 00:38:50