2
我在我的應用程序中有一個自定義的AuthorizeAttribute,它需要一個輸入參數bool UserIsOnline
。此參數用於增加一個表字段,該字段包含有關上次用戶交互時間的信息,即對於在後臺執行的jj請求,我提供false
和常規請求,或用戶啓動的ajax請求,true
值。AuthorizeAttribute和參數
這個工作大部分時間,但並不總是。 I've read thatAuthorizeAttribute
不是線程安全的,這讓我懷疑這個UserIsOnline
參數是否是錯誤的,因爲它在被處理之前被另一個進程修改。我將如何去解決這個問題?我不應該使用AuthorizeAttribute進行此操作嗎?
public class MyAuthorizeAttribute : AuthorizeAttribute
{
private MyMembershipProvider _provider = new MyMembershipProvider(); // this class is thread-safe
private bool _userIsOnline = true;
public bool UserIsOnline { get { return _userIsOnline; } set { _userIsOnline = value; } }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
// Check if user is authenticated
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated)
{
return false;
}
// Check that the user still exists in database
MyMembershipUser myUser = (MyMembershipUser)_provider.GetUser(user.Identity.Name, _userIsOnline);
if (myUser == null)
{
// User does not exist anymore, remove browser cookie
System.Web.Security.FormsAuthentication.SignOut();
return false;
}
return true;
}
}
我需要的是用戶發起的,而不是用戶發起的請求加以區分,您的解決方案假定所有的Ajax請求沒有用戶的情況下進行的,這對我來說並非如此。將更新我的問題更準確地說明這一點... –