关闭并打开同一页面后,变量值仍保存

时间:2015-12-01 05:13:02

标签: c# asp.net iis web-deployment

我不确定我是否正确地解决了这个问题。我的页面应该如何工作是每次登录时,该用户对象都作为静态变量存储在全局页面上。这样我就可以从任何页面调用它。这很好。在本地测试时,就像魅力一样。但是当我从IIS远程测试我的网站时,工作正常。但是,如果我关闭页面并再次调用它,该用户对象将保持相同的值。我是Web应用程序部署的新手。我部署站点的方式是获取解决方案资源管理器中引用的所有文件,并将它们转储到IIS上的应用程序目录中。我知道其他方法,但我尝试了其他方法,而且这是唯一有效的方法。

Pt2 :给了一些想法,这也浮现在脑海中。如果我实现会话而不是静态变量来存储用户类对象,如果两个用户尝试记录,这会工作吗?

PS。会自己测试一下,但仍然没有改变我的代码来使用会话而不是静态变量。

此外,我还是一名大三学生,我已经完全承担了项目的责任,导致首席开发人员受到保护。由于我只管理过网页这一事实,我对此感到困惑。从来没有从头开始完成一个完整的系统。任何帮助都很高兴。

请解释你的答案和谢谢

1 个答案:

答案 0 :(得分:1)

所以,让我带你回到悬崖边。

Web应用程序中的全局静态通常是一个坏主意,尤其是在处理用户数据时。这是因为static variables are only defined in one spot per AppDomain

  

无论创建了多少个类实例,都只存在一个静态成员的副本。

这意味着所有线程可以访问同一个变量。在具有多个并发用户的Web应用程序上,这是个坏消息。

更好的选择是使用某种SessionCache,但只要知道即使那些在服务器场中运行它也有限制。

UPDATE:

如果您希望您的值在每个页面上都可用,那么您始终可以创建一个基页对象,其上包含一个只读/写会话的属性。这是封装数据的简便方法。

public MyObject {
  get { return (MyObject)Session["MyObject_key"]; }
  set { Session["MyObject_key"] = value; }
}