更新会话值
本文关键字:会话 更新 | 更新日期: 2023-09-27 18:06:24
我在登录时创建了一个会话,在该会话中我已经放置了用户对象。
public sealed class MyContext
{
[ThreadStatic]
private static MyContext staticContext = null;
public HttpContext Context
{
get
{
return HttpContext.Current;
}
}
private MyContext()
{
}
public static MyContext Current
{
get
{
MyContext myContext = null;
HttpContext context = HttpContext.Current;
if (context != null)
{
//it in the Items collection (a per request store)
if (context.Items.Contains("CONTEXT_KEY"))
myContext = context.Items["CONTEXT_KEY"] as MyContext;
else
{
myContext = new MyContext();
myContext.Context.Items["CONTEXT_KEY"] = myContext;
}
}
else if (staticContext != null)
{
myContext = staticContext;
}
else
{
//create a new instance of static context as there is no web request
staticContext = new MyContext();
myContext = staticContext;
}
return myContext;
}
}
public MyUser User
{
get
{
MyUser user = null;
if (Current.Context.Session["LoggedInUser"] != null)
user = (MyUser)Current.Context.Session["LoggedInUser"];
else
{
user = UserDetail.GetUser(HttpContext.Current.User.Identity.Name);
if (user == null)
{
//if there is no userID, create anonymous user
user = new MyUser();
user.IsAnonymous = true;
user.UserID = 0;
}
//cache in session
Current.Context.Session["User"] = user;
}
return user;
}
set
{
Current.Context.Session["User"] = value;
}
}
}//end class
现在我在整个应用程序中使用这个上下文,我面临的问题是,在一种情况下,如果用户是登录的,同时admin停用该用户,我不能停止用户活动,这是因为用户的信息在会话中。因此,请建议我如何更新特定用户的信息,当管理员停用该用户
如果我理解你的问题,你只能创建一个事件!当管理员停用一个用户时,它可以生成一个事件,您的用户会话将立即响应它。这只是一个想法,我不习惯会议!
如果是我的话。我将不得不重构一些代码,以便偶尔检查后端以重新验证用户——这样,如果登录被停用,它就会被捕获。
您需要检查每个传入的页面请求,以查看用户是否已停用,如果是,则重置会话变量。例如,您可以编写一个继承Page类并覆盖Page_Load的基类。基类Page_Load可以执行检查。对于所有需要检查的页面(可能是所有页面),它们应该简单地继承Base类而不是Page类。