锁定老帖子 主题:面试遇到的session过期问题,,求解
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-25
miaofm 写道 wwy_0918 写道 xuhang1128 写道 session有个getCreationTime方法,你和当前时间比较,这个我觉得放在filter里面去实现还是可以的,对于拦截到的请求,如果发现还有30s过期,可以放在request里面一个标记,然后到页面提示下
这个肯定得在客户端写,将创建时间返回,用javascript来判断当前时间和创建时间的时间间隔,然后setTimeout(tip,sec); 这个在理,主要思想就是每次请求,都要把访问时间和到期时间返回给前台,前台起一个定时器监控,到session到期30秒时,弹倒计时框,最后session到时跳转页面就行了。在服务器端做定时监控的话,返回不到前端,如果前端定时去请求后台的话,会改变session的CreationTime,所以只有这种方法最合适 这个可以. |
|
返回顶楼 | |
发表时间:2011-03-25
当进入这个页面时可以用session.getcreateTime来获取session创建时间把他传到回页面,然后加上你的session过期时间就是session失效时间,页面的JS刷新来判断当前时间
不知道就是不是要这样的结果? |
|
返回顶楼 | |
发表时间:2011-03-25
xyueshan 写道 不是吧,搞这么麻烦,每次请求都会刷新session的有效期的(比如重新变成30分钟),所以只需要在前端做一个倒计时,最后三十秒后提示一下就可以了。如果有异步请求用js重新置为30分钟就可以了。
还用什么filter~~,再次请求的时候session又会被刷新的,大哥 看到一个头脑清醒的 |
|
返回顶楼 | |
发表时间:2011-03-25
获得session的创建时间,获得session的可以持续的时间,可以计算出是什么时候弹出对话框 然后再设定一个定时,器,让在那个时候执行弹出对话框
|
|
返回顶楼 | |
发表时间:2011-03-25
我前面已经提到过:
1、所有的请求,包括<img>标签,<object>标签,背景图片,@font-face,<script>标签,<link>标签,都会刷新Session,这些标签无法劫持 2、所有AJAX请求都会刷新Session 仅仅在页面中做定时器,能保证这页面不发起AJAX请求吗,能保证这页面不动态创建<img>吗…… 另外能保证另外的标签里没有同Session的页面在刷新吗 所以这问题没很好的解决方案 服务器推算是可行的,但对服务器的消耗过大,从经济上来说也不能算是解决方案 |
|
返回顶楼 | |
发表时间:2011-03-25
第一:不准确,但是很简单,javasript计时,快到设定的超时时间,没刷或者没打开新页面,新就倒计时,当然要控制住多个页面,要用到js操作cookie。
第二:准确但是很耗性能,那就是长链接 第三:准确,但是需要使用flash或者applet |
|
返回顶楼 | |
发表时间:2011-03-25
最后修改:2011-03-25
任何请求服务器端,然后由服务器端推送信息,再等session自动失效的做法都不行的,因为不管正常刷新页面还是ajax访问都会刷新session访问时间
可以考虑在页面里用setTimeout隐藏一个提醒的方法,每次ajax访问都clearTimeout,再重新设置 正常的刷新页面也重新设置这个隐藏方法的延迟执行 这个做法只适合于有个统一外层框架的OPOA模式的系统 如果一般的那种随便打开多少网页都行的网站,这种session过期提醒功能就没啥意义了 网站那种,只能考虑自己在服务器端模拟维护session,这个session里有创建时间和访问时间 用过滤器拦截请求,心跳请求不会刷新这个访问时间,而普通请求可以刷新访问时间 那么如果心跳请求发现快超时了,就可以弹提示框 到30秒后,其实是由心跳请求来触发session.invalidate() 让客户的session失效,里面记录的登录信息也就没了,这样来实现 |
|
返回顶楼 | |
发表时间:2011-03-26
用服务器端推技术?JS计时那也有网络延迟的啊,这是神马需求?
|
|
返回顶楼 | |
发表时间:2011-03-26
coolbaby1984514 写道 觉得前台页面js控制 是必须的
假如 我打开了一个页面 然后什么都不操作 当然也就不会跟后台进行交互 那么你设置什么filter有什么用? 并且很多用户操作也会延长session的生命周期. 封装一段小js代码,所有页面都引用下即可. 这种方法是有问题的,如果我前面打开一个页面,过会又打开一个页面,服务器SESSION没过期,你前一个页面就是跳出过期通知 |
|
返回顶楼 | |
发表时间:2011-03-26
aws 写道 任何请求服务器端,然后由服务器端推送信息,再等session自动失效的做法都不行的,因为不管正常刷新页面还是ajax访问都会刷新session访问时间
可以考虑在页面里用setTimeout隐藏一个提醒的方法,每次ajax访问都clearTimeout,再重新设置 正常的刷新页面也重新设置这个隐藏方法的延迟执行 这个做法只适合于有个统一外层框架的OPOA模式的系统 如果一般的那种随便打开多少网页都行的网站,这种session过期提醒功能就没啥意义了 网站那种,只能考虑自己在服务器端模拟维护session,这个session里有创建时间和访问时间 用过滤器拦截请求,心跳请求不会刷新这个访问时间,而普通请求可以刷新访问时间 那么如果心跳请求发现快超时了,就可以弹提示框 到30秒后,其实是由心跳请求来触发session.invalidate() 让客户的session失效,里面记录的登录信息也就没了,这样来实现 说得非常好! |
|
返回顶楼 | |