【问题标题】:Session variable dropped .net会话变量已删除 .net
【发布时间】:2015-07-09 07:08:43
【问题描述】:

我有一个 Web 应用程序(.net VB 代码),它利用会话变量来存储用户名(这里是登录名)和配置文件(管理员/客户端),身份验证由 asp 成员身份处理。然后,应用程序在加载事件上依赖这些会话变量。这个应用程序已经运行了好几年了。但是,最近用户在登录并尝试加载需要这些变量之一的新页面后抱怨偶尔出现错误消息。它最常发生在 Chrome,还有 IE 和 Firefox。

遇到此错误的用户需要退出并清除浏览历史记录,然后才能再次使用。该错误不容易复制 - 我能够在我的机器上使用“后退”按钮“暴力”触发它几次,最终触发它 - 然后我必须清除我的浏览历史记录才能让应用程序再次工作.

什么可能导致这种情况发生?

会话在“登录”页面的加载事件中设置为“会话(“类型”)=“管理员”,后续页面检查会话“类型”的值

我知道我可以改用 cookie,但出于安全原因我选择不这样做。可以改用 cookie 来防止这种情况吗?还是我需要使用membership.getuser 方法来获取用户名,然后在数据库中查找值?这似乎效率不高。

想法?

【问题讨论】:

    标签: asp.net vb.net session cookies


    【解决方案1】:

    仅供参考,ASP.NET 会话 ID 存储在一个 cookie 中,该 cookie 随每个请求/响应来回传输。给定会话的实际会话状态值不存储在 cookie 中……它们仅存储在服务器上。它们可以存储在内存中,也可以存储在 SQL 数据库中,具体取决于您如何配置 ASP.NET 会话状态。

    但会话状态可能会因多种原因而被破坏。例如,IIS 可能会突然决定重新启动您的应用程序池,在这种情况下,您的所有会话状态都将消失。

    基本上,您需要编写 Web 应用程序以始终处理 Session State 可能为空的可能性。如果它是空的,那么您可能需要将用户重定向到登录屏幕以再次输入他的凭据。

    清除浏览历史应该没有任何效果,所以我无法解释为什么这有助于解决问题。

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 2012-05-14
      • 1970-01-01
      • 2011-08-28
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多