asp.net-mvc - 每次登录都会重置会话状态
问题描述
我有一个带有简单登录页面的 MVC 应用程序。
成功验证用户后,我用他们的详细信息填充会话变量,即 -
System.Web.HttpContext.Current.Session["usergroup"] = Convert.ToInt32(userDetails[0]);
System.Web.HttpContext.Current.Session["userid"] = Convert.ToInt32(userDetails[1]);
我有一个像这样的用户类 -
public class MyUser
{
public int usergroup { get; set; }
public int userid { get; set; }
public static readonly MyUser Default = new MyUser()
{
usergroup = 0,
userid = 0
};
}
填充会话变量后,我使用这些来填充我的MyUser
变量,即 -
MyUser.Default.usergroup = (Int32)System.Web.HttpContext.Current.Session["usergroup"];
MyUser.Default.userid = (Int32)System.Web.HttpContext.Current.Session["userid"];
登录和注销,切换用户在我的开发笔记本电脑上运行良好。
我的问题是我在单独的测试笔记本电脑上的网络上设置了一个 IIS 应用程序,并以 User1 身份登录该笔记本电脑。(其中 url 是 localhost/MyApp)
然后为了测试多用户功能,在开发笔记本电脑上,我以 User2 身份登录(其中 url 是 http://{MY.NETWORK.IP}/MyApp)。
我能够以 User2 的身份正常登录,但是如果我回到测试笔记本电脑并刷新屏幕,即使我仍然以 User1 身份登录,User2 的信息也可以访问和可见!
每次用户(无论机器如何)登录时,我的会话变量都会被重置,我怎样才能阻止这种情况发生?
我做了很多阅读,看到人们通过在 IIS 中创建规则来停止缓存,但这对我没有任何作用。人们也谈论使用 2 个独立的浏览器,但是这 1. 什么也没做,2 与我无关,因为我在 2 台完全独立的机器上。
解决方案
Web 应用程序是一个应用程序,服务于多个用户。
作为单个应用程序意味着所有用户共享任何静态值。因此,当您public static readonly MyUser Default
在登录后更改属性时,所有用户现在都会看到同一个用户。
如果您不想System.Web.HttpContext.Current.Session["usergroup"]
通过代码完成所有操作(我也不想),那么您可以将其包装在某个类中:
public class MySession
{
public int Usergroup
{
get => (int)System.Web.HttpContext.Current.Session["usergroup"];
set => System.Web.HttpContext.Current.Session["usergroup"] = value;
}
// etc
}
由于它本身不存储数据,因此您甚至可以将其设为静态类。
推荐阅读
- serialization - Java对象序列化中嵌套对象原始值的java.lang.StackOverflowError异常
- firebase - 为什么在通过 Firebase 身份验证传递 id 令牌时,此 CORS 身份验证的 Google Cloud 函数会返回 403?
- bash - 在 Bash 中计算 txt 文件中不同单词的数量
- azure-active-directory - 从使用 MSAL 调用 acquireTokenSilent 返回的 accessToken 是否总是应该是 JWT?如果不是呢?
- angular - 需要 Angular 指令——文本框中的数字和/或两位小数
- python - 重新索引 Panda Multiindex
- google-bigquery - 函数 TIMESTAMP_DIFF 没有匹配的签名...... BigQuery 上的错误
- python - 返回自我的类型提示子类
- ios - 制作一个消息应用程序,但它不断重复一些帖子
- c - 根据 ftell 的说法,我的文本文件大小为 25 个字节。但是,当我使用 ftell 作为 char 数组的大小时,sizeof 给了我 200。什么给了?