在ASP.NET中使用会话变量的替代方法(包括MVC)

jam*_*uss 2 asp.net-mvc performance session-variables session-state

如果以前曾经问过我,我会道歉,但我还没有找到我头脑中的具体问题.

对于我正在构建的网站(使用ASP.NET MVC) - 性能是一个重要特性.此外,该站点有可能托管在应用程序池每20分钟回收一次的环境中(或者如果达到内存阈值则更快).我希望完全独立于依赖会话变量,而是在cookie中存储类似GUID的值.我的理由是 - 我不知道会话将持续多长时间,因为AppPool回收并且不希望他们的会话过早超时并导致他们必须重复登录.

cookie中的GUID值将充当表的查找键,其中我存储类似会话的信息(用户ID值等).所以如果我需要那些数据,我可以从数据库中检索它.我仍然会利用Session_OnEnd事件清除那个"最后活动"值超过20分钟(或者长会话配置为持续时间)的行的会话表.所以我想我仍然会使用会话状态,而不是会话变量.

不过,我的担忧是关于表现.因此,我很好奇是否有更好的方法可以避免使用会话变量,同时仍然能够知道用户是谁,并以"类似会话"的方式管理他们对网站的访问.我仍然是MVC的新手,但多年来在ASP.NET中有很多经验,所以我希望我的问题有道理!

编辑:我有点害怕想要使用SQL会话状态,因为我可能会在共享的SQL服务器托管环境中,并且如果有必要删除,我认为我没有能够创建/运行作业的登录过期的sql会话数据等.在AppPool回收方案中依赖于Session_OnEnd和cookie有任何真正的缺点吗?对于AppPool回收时当前的会话,Session_OnEnd是否可以执行?

Fra*_*ino 5

您假设Sessions仅存储在工作进程中,您可以拥有SQL State会话,请在继续之前检查此链接

  • 当排除比较时,怎么会变慢?有人说游泳池不断回收,重新启动后仍然存在,这使得SQL State Management成为街区中一个非常酷的孩子.顺便说一句,Session_OnEnd不能与SQL状态管理一起使用http://stackoverflow.com/questions/1445803/in-process-session-state-mode-is-only-mode-that-supports-sessiononend-event (2认同)