锁定老帖子 主题:面试遇到的session过期问题,,求解
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-26
flysunmicro 写道 第一:不准确,但是很简单,javasript计时,快到设定的超时时间,没刷或者没打开新页面,新就倒计时,当然要控制住多个页面,要用到js操作cookie。
第二:准确但是很耗性能,那就是长链接 第三:准确,但是需要使用flash或者applet 第一种,我不知道浏览器能不能共享COOKIE,如果能,可以在每个页面中定时查看COOKIE(专用于SESSION超时的),如果变化就重新设定时器(超时提醒定时器), 第二种,对于HTTP怎么保持长连接? 第三种其实和第一种一样,不能说用了FLASH和APPLET,就很好简决了。 |
|
返回顶楼 | |
发表时间:2011-03-26
最后修改:2011-03-28
session过期都是个伪命题......
在session里存treeBag key 精确到秒时间戳 value是触发次数 每分钟发一个心跳去 增加一个 再与最早时间戳 比较 如果 大于等于30分返回一个 js 倒计时表 倒计时完成再次触发另一个特别心跳 特别心跳 大于30分30秒 返回一个 触发logOut的js操作 如果 心跳 小于 30分 则什么也不作 如果非心跳请求把seesion 里放入一个新的treeBag 重新计数 这个东西还可以用来进行多条日志入库 |
|
返回顶楼 | |
发表时间:2011-03-26
精确的提醒是不可能做到的,因为有网络
只能提醒你的session大概还有多少秒过期了 |
|
返回顶楼 | |
发表时间:2011-03-28
抛出异常的爱 写道 什么码过期都是个伪命题......
每过1分钟去访问一下在session里作一个treeMap 时间戳作key value是触发次数 到最早时间戳 大于等于30分返回一个 js 倒计时表 倒计时完成再次触发 到最早时间戳大于 30分30秒 返回一个 logOut的触发操作 如果非心跳请求把seesion 里放入一个新的treeMap 重计数 over 最早时间戳 就是第一次放入treeMap的时间吧。 讲得不够清晰,文字排版不够好,看了会儿想了下,似乎懂了。 |
|
返回顶楼 | |
发表时间:2011-03-28
抛出异常的爱 写道 session过期都是个伪命题......
在session里存treeBag key 精确到秒时间戳 value是触发次数 每分钟发一个心跳去 增加一个 再与最早时间戳 比较 如果 大于等于30分返回一个 js 倒计时表 倒计时完成再次触发另一个特别心跳 特别心跳 大于30分30秒 返回一个 触发logOut的js操作 如果 心跳 小于 30分 则什么也不作 如果非心跳请求把seesion 里放入一个新的treeBag 重新计数 这个东西还可以用来进行多条日志入库 我觉得要想性能和准确都满足,就得JS+在Session自己做一个计时表。 什么时候去访问服务器验证由JS计时器决定 |
|
返回顶楼 | |
发表时间:2011-09-20
aws 写道 任何请求服务器端,然后由服务器端推送信息,再等session自动失效的做法都不行的,因为不管正常刷新页面还是ajax访问都会刷新session访问时间
可以考虑在页面里用setTimeout隐藏一个提醒的方法,每次ajax访问都clearTimeout,再重新设置 正常的刷新页面也重新设置这个隐藏方法的延迟执行 这个做法只适合于有个统一外层框架的OPOA模式的系统 如果一般的那种随便打开多少网页都行的网站,这种session过期提醒功能就没啥意义了 网站那种,只能考虑自己在服务器端模拟维护session,这个session里有创建时间和访问时间 用过滤器拦截请求,心跳请求不会刷新这个访问时间,而普通请求可以刷新访问时间 那么如果心跳请求发现快超时了,就可以弹提示框 到30秒后,其实是由心跳请求来触发session.invalidate() 让客户的session失效,里面记录的登录信息也就没了,这样来实现 太给力了,终于看到一个可行的方法了。 |
|
返回顶楼 | |
发表时间:2011-09-21
最后修改:2011-09-21
有那么复杂吗??
把session的过期时间放在cookie里。客户端读取cookie好了。当有新的请求。刷新cookie中的过期时间就可以。 补充一下。过期以后把cookie 里jsessionid 清空就行,这个不就无状态了。 |
|
返回顶楼 | |