【问题标题】:Maintaining a Session throughout the day全天保持会话
【发布时间】:2010-10-26 21:45:28
【问题描述】:

我需要全天维护会话吗?在会话到期时或之前,如何在 IIS 或 web.config 中强制执行全天会话而不给出任何会话超时?

注意:IIS 中的默认会话超时 - 20 分钟。

提前致谢

【问题讨论】:

  • 不能将会话超时设置为 24 小时吗?
  • 为什么不能在web.config中设置?
  • @Cyber​​Dude:这意味着会话在 last 请求之后在服务器上保持活动状态额外的 24 小时,在整个时间内占用资源。
  • 下面的答案表明我们需要知道用户浏览器是否会在 24 小时内保持打开状态

标签: c# asp.net


【解决方案1】:

您可以做的第一件事是使用 SQL(或其他数据库)会话状态服务器将会话与进程分离,该服务器保存附加到会话 ID 的会话数据的序列化副本。然后,您可以使用持久 cookie 来回传递会话 ID。然后可以重新生成或恢复任何过期的会话。

由于您希望整天保持会话(这本身就是不安全的),我们假设大多数安全考虑已经被排除在外。如果您担心重放攻击,您可以使用 HMAC 来验证 cookie 会话请求,方法是使用会话 ID、日期时间、用户名(如果这是您的数据的一部分),也许是字符串中的 IP 地址,后跟单向加盐此数据的哈希值。这样,您可以重新哈希数据,并将随请求发送的哈希与从该数据生成的哈希进行比较,以查看请求是否有效。

【讨论】:

  • +1 用于使用 SQL 而不是 inProc,这将缓解同时打开大量会话的大多数问题(在这种情况下听起来很可能)
【解决方案2】:

通过 javascript 强制每 10 分钟左右刷新一次页面。会话超时是在最后一个请求页面之后多长时间,会话变为无效。当您每 10 分钟左右刷新一次页面时,会话会在每次刷新时延长 20 分钟。

【讨论】:

  • 或使用类似 ajax 的方法刷新页面的 部分 - 然后用户不会注意到回发。
  • 这不会使浏览器关闭和保持会话。如果这不是必需的,这很有用,但如果用户离开 20 分钟并返回,它就会崩溃。
  • 这不会让会话保持 24 小时开放 - 它会无限期地这样做(这里不是要求)
  • 我相信 IIS 中也有一个设置最长会话生命周期,但我可能是错的。您当然可以始终手动实现类似的东西(24 小时后使会话无效)。
【解决方案3】:

如果您拒绝将 web.config 中的设置更改为更长的值,您可以尝试在会话超时后的短时间内(例如 17 分钟)强制浏览器刷新。可能还有其他漂亮的方法。

如果您能找到一种不用会话的方法,它会在以后减轻您的痛苦。使用缓存策略 (memcached) 或查看您的资源使用情况。

例如,您真的需要将 X 序列化到会话中吗?

【讨论】:

    【解决方案4】:

    使用 StateServer 代替 InProc

    这会将所有会话处理委托给一个单独的数据库,并将其从服务器进程中删除。这将缓解消耗服务器资源的问题,然后允许您将会话超时增加到 24 小时。

    我相信这是唯一可行的解​​决方案。

    【讨论】:

      【解决方案5】:

      Peiter 走在了正确的轨道上——发出虚假请求以维持生命。您绝对不想刷新页面,这会导致不需要的更新等。您甚至不需要刷新页面的一部分。您只需要每 X 分钟发送一个 ajax 请求,而用户的浏览器打开了一个已启用会话状态的 IHttpHandler。这是非常非常有效的——我们有一个完全依赖于会话的应用程序,所有会话超时为 5 分钟。以及每 4.5 分钟触发一次的会话心跳。它已经生产了 3 年以上,我们还没有失去一个会话。是的,在这种情况下,会话状态存储在进程中——会话的使用非常繁重,我们不想等待它们出去到 SQL 再返回。

      PS: protip -- 确保请求和响应是唯一的;在某些浏览器中,缓存会启动,否则会导致此技巧无效。

      【讨论】:

        【解决方案6】:

        将 ajax 调用放入计时器,放入一个什么都不做的方法“”,这就是即使用户在页面上但不做任何事情意味着“完全不活动”,不会注销,我们已经实现了相同的逻辑并解决了我们的问题,我们的目标是 3 到 4 小时,并且由于某些原因,我们不想更改 web.config 中的值或使用任何其他方式。

        该 ajax 调用将在“计时器”中,将计时器时间设置为“任意”。

        【讨论】:

          猜你喜欢
          • 2012-09-24
          • 2012-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-13
          • 1970-01-01
          • 2015-01-16
          • 2012-05-14
          相关资源
          最近更新 更多