全天保持会话
回答
您可以做的第一件事是通过使用SQL(或其他数据库)会话状态服务器将会话与流程分离,该会话状态服务器包含附加到会话标识的会话数据的序列化副本。然后,您可以使用持久cookie来回传递会话ID。任何到期的会话都可以重新生成或恢复。
既然你想整天保持一个会话(这天生就是不安全的),我们会假设大多数安全考虑已经被抛出。如果您担心重播攻击,您可以使用HMAC通过设置会话ID,日期时间,用户名(如果这是您的数据的一部分)来验证Cookie会话请求,也可以使用字符串中的IP地址,然后单向腌制这个数据的散列。通过这种方式,您可以重新哈希数据,并将与请求一起发送的哈希与来自该数据的生成的哈希进行比较,以查看请求是否有效。
对于使用SQL而不是inProc来说,这将缓解大量会话同时打开的问题(在这种情况下听起来很可能) – 2010-10-26 12:57:02
强制页面被由JavaScript每隔10分钟左右刷新一次。会话超时后最后请求页面多长时间,会话变得无效。每隔10分钟刷新页面时,会话在每次刷新时都会延长20分钟。
或者使用类似于Ajax的方法刷新页面的一部分*然后用户不会注意到回发。 – 2010-10-26 12:28:30
这不会使浏览器关闭和维护会话。如果这不是要求,那么这很有用,但如果用户导航20分钟并返回,则会中断。 – 2010-10-26 12:28:39
这不会保持会话24小时开放 - 它会无限期地执行(不是这里的要求) – 2010-10-26 13:02:08
如果您拒绝将web.config中的设置更改为更长的值,则可以尝试强制浏览器在会话超时的短时间内(例如17分钟)刷新。可能还有其他漂亮的方法。
如果你可以找到一个方法来做到没有这个会话,它会在以后节省你的痛苦。使用缓存策略(memcached)或查看资源使用情况。
例如你真的需要将X序列化到会话中吗?
使用StateServer而非是InProc
这代表所有的会话处理到一个单独的数据库,并从服务器的过程中删除。这样可以缓解服务器资源耗尽的问题,从而可以将会话超时增加到24小时。
我相信这是唯一可行的解决方案。
Peiter处于正确的轨道上 - 制造虚假的请求以保持活力。你绝对不想刷新页面,导致不需要的更新等。你甚至不需要刷新页面的一部分。您只需每隔X分钟发送一次ajax请求,而用户将浏览器打开到启用会话状态的IHttpHandler。这非常非常有效 - 我们有一个应用程序完全依赖会话来处理5分钟会话超时的任何事情。并且每4.5分钟发一次会话心跳。它已经投产3年多了,我们还没有失去一个会议。是的,在这种情况下会话状态被存储在进程中 - 会话的使用非常繁重,我们不希望等待他们出去使用SQL并返回。
PS:protip - 确保请求和响应唯一;否则在某些浏览器中缓存会导致此技巧无效。
把一个ajax调用放入一个定时器,一个不执行任何操作的方法“”,这就是即使用户在页面上但没有做任何事情意味着“完全不活动”,不会注销,我们已经实现了相同逻辑并解决了我们的问题,我们的目标是3到4个小时,并且我们不希望更改web.config中的值或因某些原因使用任何其他方式。
ajax调用将在“计时器”中,将计时器时间设置为“任何”。
- 1. SharedPreferences保持会话
- 2. 会话劫持安全
- 3. 如何保持Servlet会话?
- 4. Xamarin.Android保持会话记录
- 5. 保持会话活着
- 6. J2EE:Singleton vs保持会话
- 7. 保持会话活着MVC3
- 8. 如何保持会话?
- 9. 会话保持超时
- 10. 如何保持会话
- 11. 保持会话活着C#
- 12. ASP.NET会话保持“0”
- 13. 如何保持全天候运行
- 14. 在Seam中保持会话和对话
- 15. 保持电话中的用户会话
- 16. 如何使会话持续保持.net
- 17. 连接池会保持oracle会话保持活动状态吗?
- 18. PHP会话将不会保持注册
- 19. JSONP PHP会话不会保持不变
- 20. 使用ajax请求保持会话活动安全吗?
- 21. MongoDB:我应该一直保持全局会话吗?
- 22. 如何保持本地化和全球化的会话?
- 23. Android对话框保持安静 - 不会保持一种尺寸
- 24. Django会话 - 在登录/注销之间保持会话数据
- 25. 丢失会话变量,同时保持会话ID
- 26. 你有多久保持会话cookie?
- 27. 保持会话在python中生效
- 28. 保持Java对象存活会话
- 29. 跨域会话保持活跃在asp.net
- 30. 如何保持用户登录会话?
难道你不能只将会话超时设置为24小时吗? – CyberDude 2010-10-26 12:25:07
为什么你不能在web.config中设置它? – 2010-10-26 12:27:25
@CyberDude:这意味着会话在* last *请求后的24小时内在服务器上保持活动状态,并占用整个时间的资源。 – 2010-10-26 12:30:04