全天维护会话

时间:2010-10-26 12:18:35

标签: c# asp.net

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

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

先谢谢

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

由于您希望整天维护一个会话(这是天生就不安全),我们将假设已经抛弃了大多数安全考虑因素。如果您担心重放攻击,您可以使用HMAC通过会话ID,日期时间,用户名(如果这是您的数据的一部分)来验证cookie会话请求,也可以使用字符串中的IP地址,然后单向腌制这个数据的哈希值。通过这种方式,您可以重新处理数据并将发送的哈希值与该数据生成的哈希值进行比较,以查看请求是否有效。

答案 2 :(得分:0)

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

如果你能找到一种没有会话的方法,那么以后会为你节省痛苦。使用缓存策略(memcached)或查看您的资源使用情况。

例如,您是否真的需要将X序列化为会话?

答案 3 :(得分:0)

使用StateServer而不是InProc

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

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