用户会话之间的ASP.NET会话变量泄漏

时间:2018-09-05 03:57:43

标签: asp.net session-variables session-state

当用户浏览我的网站时,我最初使用静态变量来存储一些用户信息。我遇到的问题是,有时用户会导航到某个地方,并在页面上看到另一个用户名。我改用会话变量来解决此问题,但是发生了同样的问题。然后我认为以某种方式使会话变量名称唯一可以解决问题,例如代替

Session["userId"]

我更改了所有会话变量,以在创建和引用它们时附加用户的唯一用户名,因此它们是:

Session["userId" + Context.Identity.User.Name.ToString()] 

到目前为止,我还没有关于该问题的报告,但这实际上可以工作吗?有没有一种简单的方法来保护会话,以免变量在用户之间泄漏?我对ASP.NET代码(特别是webforms)很有信心,但是随着更多用户使用该站点,我才遇到会话问题。由于该网站是通过AWS Elastic Beanstalk构建的,因此我对IIS设置没有太多控制权,因此它大部分是默认的IIS设置。

2 个答案:

答案 0 :(得分:1)

这应该可以正常工作,但是我建议将用户名或用户配置文件信息存储在cookie或本地存储中,因为正如您提到的,当许多用户登录时,它们会在服务器内存上为他们维护会话(我相信默认情况下会话是内存中的)不是进行中或Redis)。这是不可扩展的,就像数百万用户登录或您创建负载测试服务器一样,会话管理将占用大量内存。但是,几百个用户并没有太多开销。

您可以使用sessionStorage将信息存储在用户浏览器中,例如:

设置值

sessionStorage.setItem("user_name", "test");

获得价值

var userName = sessionStorage.getItem("user_name");

它也可以存储javascript对象或json。

Cookie是在用户端存储信息的旧方法:

创建cookie

document.userCookie = "username=John Doe";

读取cookie

document.userCookie //"username=John Doe"

表单身份验证还提供加密和安全的cookie,该cookie与会话一起维护,如果用户个人资料信息是敏感数据,也很好。

答案 1 :(得分:0)

对不起,我无法为您的问题写评论,但是: 使用AWS Elastic Beanstalk对Java开发人员也存在相同的问题: https://forums.aws.amazon.com/thread.jspa?threadID=84027 首先,我建议您尝试为HttpResponse(临时解决方案)设置无缓存,然后 我建议您尝试使用IIS代理设置。

如果没有帮助(并且您正在使用负载平衡器),请拒绝使用inproc设置,如本主题中所示: User on wrong session

PS。您真的不必使会话变量名称不同-ASP.NET为每个会话设置不同的Session_ID来保证会话唯一性。