我正在使用 session 来做两件事:
- 跟踪要为特定公司加载的 css 文件。
- 跟踪跟踪我们所在公司的 Company Id Guid。
我看到这有时会以 null 形式出现,但我没有找到一致的问题来追踪。我毫不怀疑这可能是我需要跟踪的代码中的某些内容,但这让我想到了有关 session 的问题...
- 我是否非常依赖 Session 在屏幕之间传递信息?
- 是否一致?
- 什么可以在页面加载之间清除它?
- session 是否容易被用户清除?
- 我应该使用其他更可靠的东西吗?
我担心我会把它移到现场使用并出现各种问题。
我只是这样做:
Session["Css"] = css;
并以同样的方式阅读:
css = Session["Css"]
更新
我正在使用的 session :
HttpSessionStateBase Controller session
最佳答案
session 状态有几种类型。 InProc、StateServer 和 SqlServer。我相信默认是 InProc。您可以在 MSDN here 上阅读更多相关信息和 here .
其中每一个都将遵守 web.config 文件中定义的 sessionState 的超时值。对于单个服务器设置(这是我通常做的),我通常将我的 sessionState 设置如下:
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
timeout="2880" />
这是与 Forms Auth 相同的默认超时,因此只要我的用户对 cookie/ session 进行身份验证,我的 session 就会一直存在。这将要求您将 ASP.NET 状态服务器上的启动设置为 Automatic
。以下是我在解释这些类型及其潜在缺点时的高级通行证。
进程中
每次应用程序池回收 Web 应用程序的工作进程时,这将被重置。我相信这就是发生在您身上的事情,这就是为什么您的 session 变量在看似随机的时间为空的原因。
状态服务器
这将在应用程序池回收期间保持状态,但需要您启用 ASP.NET 状态服务器服务,并将其启动类型更改为自动。
如果您有一个网络农场或多个网络服务器处理网站,您可能会遇到问题,除非您运行专用的状态服务器。
这要求存储在 session 变量中的变量是[Serializable]
。
SQLServer
这会将 session 变量持久保存到 SQL 数据库中,通常是网络场情况的最佳方法。
这要求存储在 session 变量中的变量是[Serializable]
。
关于c# - 我应该如何依赖 Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14075989/