【发布时间】:2011-09-21 01:48:04
【问题描述】:
我可以动态更改会话超时吗?超时时间必须根据用户角色设置。我尝试使用 configure::write 动态更改超时,但它不起作用。看来要使新的会话超时生效,您必须重置会话,但重置会话会丢失登录信息。
【问题讨论】:
-
现在需要,请帮忙
-
感谢回答,问题已解决。
我可以动态更改会话超时吗?超时时间必须根据用户角色设置。我尝试使用 configure::write 动态更改超时,但它不起作用。看来要使新的会话超时生效,您必须重置会话,但重置会话会丢失登录信息。
【问题讨论】:
我认为在您检查角色成员资格后使用类似以下的内容会得到您想要的。
HttpContext.Current.Session.Timeout = 1200;
【讨论】:
我认为您说在创建会话超时后无法更改会话超时是正确的,也许您可以考虑使用新的超时重新生成一个。
但也许更简单的解决方案是使用 javascript,您可以设置一个超时值,并在超时时发送一个 ajax 请求将用户注销。 如果用户禁用 javascript,这显然不起作用,但这取决于您希望它有多安全。
【讨论】:
您是否考虑过在会话中使用变量来存储上次页面加载的日期/时间,而不是更改会话超时时间,以便在下次页面加载时检查它?
您可以在 AppController 中的 beforeFilter() 方法中添加一些代码,以计算上次页面加载(存储在会话中)和现在之间经过的时间量,如果这大于您指定用户角色的会话长度,销毁会话。如果没有,请将当前日期/时间存储在会话中,以便下次使用。
【讨论】: