论坛首页 招聘求职论坛

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

浏览 35476 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-03-25  
miaofm 写道
wwy_0918 写道
xuhang1128 写道
session有个getCreationTime方法,你和当前时间比较,这个我觉得放在filter里面去实现还是可以的,对于拦截到的请求,如果发现还有30s过期,可以放在request里面一个标记,然后到页面提示下

这个肯定得在客户端写,将创建时间返回,用javascript来判断当前时间和创建时间的时间间隔,然后setTimeout(tip,sec);


这个在理,主要思想就是每次请求,都要把访问时间和到期时间返回给前台,前台起一个定时器监控,到session到期30秒时,弹倒计时框,最后session到时跳转页面就行了。在服务器端做定时监控的话,返回不到前端,如果前端定时去请求后台的话,会改变session的CreationTime,所以只有这种方法最合适



这个可以.
0 请登录后投票
   发表时间:2011-03-25  
当进入这个页面时可以用session.getcreateTime来获取session创建时间把他传到回页面,然后加上你的session过期时间就是session失效时间,页面的JS刷新来判断当前时间
不知道就是不是要这样的结果?
0 请登录后投票
   发表时间:2011-03-25  
xyueshan 写道
不是吧,搞这么麻烦,每次请求都会刷新session的有效期的(比如重新变成30分钟),所以只需要在前端做一个倒计时,最后三十秒后提示一下就可以了。如果有异步请求用js重新置为30分钟就可以了。
还用什么filter~~,再次请求的时候session又会被刷新的,大哥



看到一个头脑清醒的
0 请登录后投票
   发表时间:2011-03-25  
获得session的创建时间,获得session的可以持续的时间,可以计算出是什么时候弹出对话框 然后再设定一个定时,器,让在那个时候执行弹出对话框
0 请登录后投票
   发表时间:2011-03-25  
我前面已经提到过:
1、所有的请求,包括<img>标签,<object>标签,背景图片,@font-face,<script>标签,<link>标签,都会刷新Session,这些标签无法劫持
2、所有AJAX请求都会刷新Session

仅仅在页面中做定时器,能保证这页面不发起AJAX请求吗,能保证这页面不动态创建<img>吗……

另外能保证另外的标签里没有同Session的页面在刷新吗

所以这问题没很好的解决方案

服务器推算是可行的,但对服务器的消耗过大,从经济上来说也不能算是解决方案
0 请登录后投票
   发表时间:2011-03-25  
第一:不准确,但是很简单,javasript计时,快到设定的超时时间,没刷或者没打开新页面,新就倒计时,当然要控制住多个页面,要用到js操作cookie。
第二:准确但是很耗性能,那就是长链接
第三:准确,但是需要使用flash或者applet
0 请登录后投票
   发表时间:2011-03-25   最后修改:2011-03-25
任何请求服务器端,然后由服务器端推送信息,再等session自动失效的做法都不行的,因为不管正常刷新页面还是ajax访问都会刷新session访问时间

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

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

网站那种,只能考虑自己在服务器端模拟维护session,这个session里有创建时间和访问时间
用过滤器拦截请求,心跳请求不会刷新这个访问时间,而普通请求可以刷新访问时间
那么如果心跳请求发现快超时了,就可以弹提示框
到30秒后,其实是由心跳请求来触发session.invalidate()
让客户的session失效,里面记录的登录信息也就没了,这样来实现
0 请登录后投票
   发表时间:2011-03-26  
用服务器端推技术?JS计时那也有网络延迟的啊,这是神马需求?
0 请登录后投票
   发表时间:2011-03-26  
coolbaby1984514 写道
觉得前台页面js控制 是必须的

假如 我打开了一个页面 然后什么都不操作
当然也就不会跟后台进行交互
那么你设置什么filter有什么用?

并且很多用户操作也会延长session的生命周期.

封装一段小js代码,所有页面都引用下即可.

这种方法是有问题的,如果我前面打开一个页面,过会又打开一个页面,服务器SESSION没过期,你前一个页面就是跳出过期通知
0 请登录后投票
   发表时间:2011-03-26  
aws 写道
任何请求服务器端,然后由服务器端推送信息,再等session自动失效的做法都不行的,因为不管正常刷新页面还是ajax访问都会刷新session访问时间

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

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

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


说得非常好!
0 请登录后投票
论坛首页 招聘求职版

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