【问题标题】:Session State from Single instance to Multi Instance从单实例到多实例的会话状态
【发布时间】:2013-11-16 18:11:57
【问题描述】:

在我当前的任务中 - 我必须针对会话状态管理问题实施解决方案。目前的实现如下:

  1. 有一个 asp.net 表单允许您添加多个条目以形成一个批次。
  2. 这些字段代表一个条目(大多数字段是自动完成的) - 一旦您填写了所有字段并单击“添加”按钮 - 条目将添加到网格视图中 - 每次“添加”按钮单击它会导致回帖,并且网格视图会重新填充显示以前的条目。
  3. 多次重复上述步骤以输入多个条目后 - 所有条目都显示在网格视图中 - 然后单击“输入批处理”按钮 - 将网格视图中的所有条目作为批处理提交到数据库。

问题:要启用上述大部分功能 - 在整个页面和其他页面上都实现了会话状态 (InProc)。问题是——用户可以打开同一个应用程序的多个实例,然后应用程序就会发疯。另一个问题是 - 有时应用程序会启动用户并且他们必须重新登录,并且当他们在批处理中所做的所有条目都从网格视图中消失时。

我看到网络表单上到处都实现了会话。解决上述两个问题最明显的解决方案是实现会话状态(SQL Server)模式。

但在我继续实施之前,我有几个问题,如果有人可以提供帮助:

1 我可以更改当前的实现吗(这样我就不必重新编写已经在 Web 表单上使用的会话变量 - 因为它们有两个) - 我试图更改 web.config 以具有 ( sessionstate cookieless="true" - 我希望这会将会话 ID 放在 URL 中,进而启用多个实例的会话状态) - 但是在这样做之后 - 大多数字段的自动完成功能不起作用,所以我已更改配置以允许基于 cookie。那么有没有办法改变当前的会话实现,使其在应用程序的多个实例中正常工作。

  1. 如果我必须重新实现会话状态 - 谁能给我简要概述如何实现会话状态(SQL 服务器模式),以便它适用于多个实例 - 例如唯一键使用什么(如何设置并根据此键为多个实例获取会话变量)以及如何配置数据库中的表等。

注意:当前会话状态是“InProc”模式,我可以说因为它没有在任何地方设置,所以我认为这是默认设置。会话变量在当前实现中非常标准。

这是我开始的一个新项目 - 这是我的第一个任务 - 但是代码真的很混乱 - 它没有模块化甚至基本的 3 层实现。该代码非常难以管理且难以调试。

非常感谢任何帮助和建议。谢谢各位。

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    所有需要的都在Session-State Modes提供。

    您用于存储/检索会话状态的代码不会改变。

    状态服务器模式是不可能的吗?

    【讨论】:

    • 但是如果应用程序重新启动或用户会话结束并且他们需要重新登录 - 在状态服务器模式下是否会保留会话变量?
    • 1) 是的 - 如果您阅读了链接到的文章就会知道。 2) 不,这是一个新的会话。您可以在客户端使用一些 JavaScript 来保持会话“活动”。
    • 抱歉,当您说 1) 和 2) 时,我不明白您指的是什么...我知道如果“状态服务器”上的状态服务重新启动,那么所有状态信息都会丢失...但是请通过说 1) 和 2) 来澄清您所指的内容...感谢您的帮助。
    • 1) "但是如果应用重启" 是的,会话状态会被持久化。 2)“如果用户会话结束并且他们需要重新登录” 不,会话状态不会被持久化,因为它是一个新会话。 -- 希望这更清楚一点。
    • 谢谢,但是当应用程序重新启动时,用户需要重新登录 - 所以它是一个新的会话。所以现在我认为唯一的出路就是SQL server 模式。如果你不这么认为,请告诉我。感谢您的帮助,非常感谢。
    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多