我应该如何依赖是会话(How reliant should I be on Session)

2019-10-17 12:40发布

我使用的会议做两件事情:

  1. 跟踪哪个CSS文件加载特定的公司。
  2. 跟踪公司标识的Guid跟踪我们是在什么样的公司。

我看到,这是在为空有时来,但我没有得到一致的问题追查。 我毫不怀疑这可能是东西在我的代码,我需要追查,但这使我达到我对会议的问题...

  1. 我是不是依靠会话多通过屏幕之间的信息?
  2. 是不是一致的?
  3. 可能是什么页面加载之间的清除呢?
  4. 是届容易被用户清零?
  5. 我应该用别的东西更可靠?

我很担心,我会提出这个活的使用,并有各种问题。

我只是这样做:

Session["Css"] = css;

和阅读同样的方式:

css = Session["Css"]

UPDATE

我使用的会话:

HttpSessionStateBase控制器会话

Answer 1:

有一些类型的会话状态。 是InProc,StateServer的,和SQLServer。 我相信,默认为是InProc。 你可以阅读更多有关这在MSDN上这里和这里 。

每个将服从你的web.config文件中定义的sessionState超时值。 对于单个服务器设置(这是我通常是这样),我通常有我的sessionState设置如下:

<sessionState 
    mode="StateServer" 
    stateConnectionString="tcpip=127.0.0.1:42424" 
    timeout="2880" />

这是相同的默认超时为窗体身份验证,所以只要我的会议将坚持围绕为我的用户身份验证的Cookie /会话。 这将需要设置启动了ASP.NET状态服务器上Automatic 。 下面是我的高层通在解释类型及其潜在的缺点。

是InProc

这将是复位每次应用程序池回收的web应用程序的工作进程。 我相信这是发生了什么事给你,这就是为什么你会话变量是在什么似乎是随机的时间空。

的StateServer

这将持续状态跨应用程序池再循环,但需要您启用ASP.NET状态服务器服务,并改变它的启动类型设置为自动。

如果你有一个Web场或多个Web服务器处理的网站,除非你运行一个专用的状态服务器可以运行到的问题。

这就要求存储在会话变量变量是[Serializable]

SQLServer的

这将持续会话变量到SQL数据库,通常是一个Web场的情况,最好的办法。

这就要求存储在会话变量变量是[Serializable]



Answer 2:

你能不能写你的方法GetCss()东西沿着这些路线?

GetCss() {

    var css = (CastToYourTypeHere)Session["css"];

    if(css == null) {

        //do whatever you'd normally do here to set the css, 
        //e.g. get the users guid and find their company css, and set css equal to it
        css = myHypotheticalGetCssBasedOnTheUserFunction();

    }

    return css;

}

这样,你有种覆盖所有的基地,你可以愉快地使用会话,如果它失去了你刚刚重新运行你最初的“getCssForThisUser”类型的代码是什么原因。

IMO,会是个不错的方式来保存这种数据在你所描述的例子类型的网页之间的每个用户。



文章来源: How reliant should I be on Session