【问题标题】:Sessionstate not being saved between pages页面之间没有保存会话状态
【发布时间】:2011-02-15 01:06:38
【问题描述】:

我在使用 asp.net c# 站点时遇到问题,我将会话状态对象设置为 true,然后重定向到需要检查会话状态对象值的另一个页面,并且它为空。

有时它设置正确,而有时它只是为空。

当我在本地机器上调试时,它每次都能完美运行。只有当我上传到我的网络服务器时,才会发生这种喜怒无常的行为。

由于它基于站点的安全性,因此会话数据每次都有效且准确显然很重要。

会话状态数据不可靠吗?

AFAIK 设置为 inproc、cookieless、30 分钟超时、IIS 的普通安装。

有人有什么建议吗?也许我需要在会话数据的存储和读取之间进行 thread.sleep?

注意:写入和读取之间的时间大约是 70 毫秒。有足够的时间将数据写入 RAM .....

【问题讨论】:

    标签: c# asp.net iis session-state


    【解决方案1】:

    没有。听起来您在滥用会话状态。你不能依赖用户的会话在那里。您的 ASP.NET 工作进程可能会回收,重新启动应用程序并终止所有会话,或者您的网站中的文件可能会更改,导致您的应用程序重新启动并刷新所有会话,cookie 可能会在客户端上刷新,可能会发生超时等。

    因此,您必须为所有这些场景提供会话状态。尽量避免将会话状态用于此类事情。如果您在会话状态中设置访问权限并且您不知道它是如何工作的,那么您可能会因为很多安全风险而打开您的网站。

    【讨论】:

      【解决方案2】:

      一切都指向一个网络农场。如果您在生产环境中有不同的 Web 服务器为您的应用程序提供服务,您可以试验这种行为。

      我没有找到任何其他解释这个“在我的机器上工作!”

      【讨论】:

      • 我同意,它间歇性工作的原因是因为有时你得到相同的工作进程而其他人没有。尝试使用 InProc 以外的会话状态模式。
      【解决方案3】:

      对于您的特定问题,我没有答案,但克劳迪奥我会做一些事情。

      我要说的是,使用 session 来保证安全已经是 90 年代了。字面上地。

      FormsAuthentication 的开发是为了替代该技术,并且做得非常好。

      您应该只依赖会话来解决容易恢复的琐碎问题。

      安全不是其中之一。

      【讨论】:

        【解决方案4】:

        如果会话状态丢失,通常是因为您的进程要么回收,要么失败。我永远不会“依赖”页面之间的会话状态。相反,您可能想尝试以其他方式在页面之间保留数据。也许通过表单变量传递信息或将数据保存在数据库中。

        ASP.NET Profiles 是保存此类信息的首选方式。您可能想阅读ASP.NET State Management Recommendations

        【讨论】:

        • 实际上,OP 表明这是一个安全问题,因此可能与身份验证有关。在这种情况下,如果没有表单票证,个人资料就没有权威使用。
        猜你喜欢
        • 2013-05-09
        • 1970-01-01
        • 2014-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多