c# - 我应该如何依赖 Session

标签 c# asp.net-mvc razor

我正在使用 session 来做两件事:

  1. 跟踪要为特定公司加载的 css 文件。
  2. 跟踪跟踪我们所在公司的 Company Id Guid。

我看到这有时会以 null 形式出现,但我没有找到一致的问题来追踪。我毫不怀疑这可能是我需要跟踪的代码中的某些内容,但这让我想到了有关 session 的问题...

  1. 我是否非常依赖 Session 在屏幕之间传递信息?
  2. 是否一致?
  3. 什么可以在页面加载之间清除它?
  4. session 是否容易被用户清除?
  5. 我应该使用其他更可靠的东西吗?

我担心我会把它移到现场使用并出现各种问题。

我只是这样做:

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/

相关文章:

html - 链接在 Firefox 中不起作用

asp.net-mvc - ASP.NET 5/MVC 6 应用程序设置

c# - ASP.Net MVC Entity Framework 提交模型,然后在编辑页面打开新模型

c# - 使用 LightInject 解析静态函数中的实例

javascript - 如何根据 Session 值隐藏 HTML 元素

c# - 使用 PerRequestLifetimeManager() 配置的 Unity 针对 WebApi 请求而非 MVC 请求创建多个 DbContext 实例

javascript - 当文件是比域更深的文件夹时,用JS访问文件

c# - 找到正确的线程来调用方法而不会失败

c# - 使用不安全的每像素访问绘制位图会导致空图像

c# - 如何在句子文本中搜索单词 [C#]