论坛首页 招聘求职论坛

面试遇到的session过期问题,,求解

浏览 35482 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-03-26  
flysunmicro 写道
第一:不准确,但是很简单,javasript计时,快到设定的超时时间,没刷或者没打开新页面,新就倒计时,当然要控制住多个页面,要用到js操作cookie。
第二:准确但是很耗性能,那就是长链接
第三:准确,但是需要使用flash或者applet


第一种,我不知道浏览器能不能共享COOKIE,如果能,可以在每个页面中定时查看COOKIE(专用于SESSION超时的),如果变化就重新设定时器(超时提醒定时器),
第二种,对于HTTP怎么保持长连接?
第三种其实和第一种一样,不能说用了FLASH和APPLET,就很好简决了。
0 请登录后投票
   发表时间:2011-03-26   最后修改:2011-03-28
session过期都是个伪命题......

在session里存treeBag  key 精确到秒时间戳  value是触发次数  
每分钟发一个心跳去 增加一个
再与最早时间戳 比较
如果 大于等于30分返回一个 js 倒计时表 倒计时完成再次触发另一个特别心跳
特别心跳 大于30分30秒  返回一个 触发logOut的js操作
如果 心跳 小于 30分 则什么也不作

如果非心跳请求把seesion 里放入一个新的treeBag 重新计数
这个东西还可以用来进行多条日志入库
0 请登录后投票
   发表时间:2011-03-26  
精确的提醒是不可能做到的,因为有网络
只能提醒你的session大概还有多少秒过期了
0 请登录后投票
   发表时间:2011-03-28  
抛出异常的爱 写道
什么码过期都是个伪命题......

每过1分钟去访问一下在session里作一个treeMap 时间戳作key  value是触发次数
到最早时间戳 大于等于30分返回一个 js 倒计时表 倒计时完成再次触发
到最早时间戳大于 30分30秒 返回一个 logOut的触发操作

如果非心跳请求把seesion 里放入一个新的treeMap 重计数
over


最早时间戳 就是第一次放入treeMap的时间吧。
讲得不够清晰,文字排版不够好,看了会儿想了下,似乎懂了。
0 请登录后投票
   发表时间:2011-03-28  
抛出异常的爱 写道
session过期都是个伪命题......

在session里存treeBag  key 精确到秒时间戳  value是触发次数  
每分钟发一个心跳去 增加一个
再与最早时间戳 比较
如果 大于等于30分返回一个 js 倒计时表 倒计时完成再次触发另一个特别心跳
特别心跳 大于30分30秒  返回一个 触发logOut的js操作
如果 心跳 小于 30分 则什么也不作

如果非心跳请求把seesion 里放入一个新的treeBag 重新计数
这个东西还可以用来进行多条日志入库



我觉得要想性能和准确都满足,就得JS+在Session自己做一个计时表。
什么时候去访问服务器验证由JS计时器决定
0 请登录后投票
   发表时间:2011-09-20  
aws 写道
任何请求服务器端,然后由服务器端推送信息,再等session自动失效的做法都不行的,因为不管正常刷新页面还是ajax访问都会刷新session访问时间

可以考虑在页面里用setTimeout隐藏一个提醒的方法,每次ajax访问都clearTimeout,再重新设置
正常的刷新页面也重新设置这个隐藏方法的延迟执行

这个做法只适合于有个统一外层框架的OPOA模式的系统
如果一般的那种随便打开多少网页都行的网站,这种session过期提醒功能就没啥意义了

网站那种,只能考虑自己在服务器端模拟维护session,这个session里有创建时间和访问时间
用过滤器拦截请求,心跳请求不会刷新这个访问时间,而普通请求可以刷新访问时间
那么如果心跳请求发现快超时了,就可以弹提示框
到30秒后,其实是由心跳请求来触发session.invalidate()
让客户的session失效,里面记录的登录信息也就没了,这样来实现


太给力了,终于看到一个可行的方法了。
0 请登录后投票
   发表时间:2011-09-21   最后修改:2011-09-21
有那么复杂吗??
把session的过期时间放在cookie里。客户端读取cookie好了。当有新的请求。刷新cookie中的过期时间就可以。
补充一下。过期以后把cookie 里jsessionid  清空就行,这个不就无状态了。
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics