剛剛過去的3天,探索會員資格,iprincipal,身份和其他goodies ..但有些東西仍然不清楚。 爲什麼最好使用這個煽動的簡單的存儲會話中最小化登錄用戶對象?它可以保存角色,權限和其他自定義屬性。ASP.NET MVC內置成員vs會話
來實現同樣的事情asp.net表單身份驗證方式,我會做:
protected void Application_AuthenticateRequest()
{
HttpCookie cookie = Request.Cookies.Get(FormsAuthentication.FormsCookieName);
if (cookie == null)
return;
bool isPersistent;
int webuserid = GetUserId(cookie, out isPersistent);
//Lets see if the user exists
var webUserRepository = Kernel.Get<IWebUserRepository>();
try
{
WebUser current = webUserRepository.GetById(webuserid);
//Refresh the cookie
var formsAuth = Kernel.Get<IFormsAuthService>();
Response.Cookies.Add(formsAuth.GetAuthCookie(current, isPersistent));
Context.User = current;
}
catch (Exception ex)
{
//TODO: Logging
RemoveAuthCookieAndRedirectToDefaultPage();
}
}
private int GetUserId(HttpCookie cookie, out bool isPersistent)
{
try
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
isPersistent = ticket.IsPersistent;
return int.Parse(ticket.UserData);
}
catch (Exception ex)
{
//TODO: Logging
RemoveAuthCookieAndRedirectToDefaultPage();
isPersistent = false;
return -1;
}
}
所以我需要查詢數據庫上的每個驗證的請求,當使用會話我會做只有當用戶登錄時,我知道您可以將角色和其他用戶數據存儲在票據Cookie中,但我認爲它不安全,因爲攻擊者可以修改cookie內容,將其移動並更多。
所以,其他人同意?
值得指出的有替代品以上也是如此,如果你快樂流浪因循守舊一點。 Mongo/Memcached對於這類事情可以很好地利用proc商店。 – Nik 2010-09-25 23:55:22
謝謝,但考慮一下上面的場景,是否有必要在每次獲取用戶obj並將其分配給上下文的請求中繼續敲擊數據庫? – TomerMiz 2010-09-26 07:25:49
嗨,有誰可以迴應? – TomerMiz 2010-09-26 21:12:55