jsp页面两分钟刷新一次,实现后,由于Weblogic的Session的失效时间为1小时,所以Session永远都不回失效了! 如题,我将前台的某个JSP页面(在框架里的一个隐藏的页面)设置为2分钟刷新一次(里面走java类,通过Weblogic访问数据库),但Weblogic的Session的失效时间为1个小时,这样的话,如果用户长时间不操作,由于实时刷新,Weblogic认为每两分钟都有操作,所以Session永远不会失效。我想得到最新的数据,但又不能满足用户的需要(长时间不操作,Session应该自动失效),我有什么办法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般session失效时间定为2分钟(这里你可以根据需要来调整,比如说5分钟)页面刷新时间一般为6秒钟一次(一般聊天室的刷新就是4~6秒,在这里可以根据你自己的需要来调整比如说30秒刷一次),也就是说当你关闭你所有的网页2分种后,服务器端关于你的session就会消失,如果你不关闭网页原理上是永远都不会消失,这样你即可以做到实时,又可以让session消失,因为两分种时间差不是太大,所以感觉上是很实时的了。 Weblogic的Session的默认失效时间为1个小时,即当用户打开网页,1个小时不进行任何操作,Weblogic就将Session失效。但我的实时刷新操作会让Weblogic误解为用户一直在操作,所以永远都不失效,那就麻烦了.但你如果让Session在2-3分钟就失效那好像又不太合适,用户操作起来肯定不方便 噢,你明白你的意思了,你用一个session来存放用户的最后操作时间,也就是说每当用户操作一次(比如:浏览网页,埴报内容等页,凡事用户可以操作的页,你都写一段记录操作时间的代码,你可以写一个文件,然后用include包含进来),你就把他的操作时间放到这个session中,每当你那个页面刷新时先来判断,最后操作时间与当前时间的差是否超过规定的时间,如果超过,你就删除所有的该用户的session值,然后停止刷新该页,如果没有超过,就继续刷新就行了。注:你的那个刷新页中不要写记录最后操作时间的代码。 to bluemoon0001:不是你猜的那个意思,其实你不要管我刷新时进行了什么操作啊,我现在就是想达到我的要求。并且我刷新JSP时,JSP中访问了数据库,访问了SESSION,这些都是必须操作。有没有其他的办法? 记录最后3次(1小时/20分)操作发生的时间,每次操作时记录都刷新,刷新之前判断如果倒数第3次操作时间是在1小时之前,session就失效。不知是不是满足要求? TO danjiewu(阿丹),那就麻烦了,每一个用户提交的操作地方都要进行记录,工作量很大啊我觉得可以实现,但不可行 使用HTTP长连接吧,可以实现实时数据传送,并且客户端断线可以立刻反应出来。 另外HTTP长连接并会影响SESSION,换句话说就是如果没有客户端的网页刷新,SESSION仍然会失效 记录用户的最后一次操作时间到session中,然后每次刷新判断一下是否超过了一个小时 楼主好好的看一下,我上面第二次说的内容吧,是用一个session变量来记录用户最后一次操作的时间,在你的那个刷新页面里,判断一下用户最后一次操作的时间(session中记录的)与当前时间的差是否大于你规定的超时时间,如果大于,停止刷新,并删除一切session值。至于记录每次操作的时间也不麻烦啊,你的网面中肯定有公用的文件对吧,比如说:head.jsp,等...,在这样的页面中,把用户的当前操作时间写到那个session中不就行了吗?这就是在聊天室中,多长时间不说话被自动踢出聊天室的原理,楼主好好的看一下吧。如果你不用这种方法,再也没有别的更好的方法了。 楼上的方法对付同时在线比较少的系统还可以,如果在线人数多些就不行了。还是HTTP长连接方式,或者叫服务器推技术实现比较的合适 to bluemoon0001:谢谢你的帮助,你说的这种方法肯定是可以实现的,但我的系统里面都是用的框架结构,基本上没有使用同一个JSP的情况。我会在仔细想想你提的这个思路的另外我考虑的一个情况是,用户进行操作,可能只是IE客户端执行一些脚本而已,在这种情况下也就不会倒服务器端了,也是个问题 to xlyyc(宇),你能给一点相关的资料吗 ,这个方法我没有用过,想研究一下按照你的意思,应该是能够实现的 将下面的代码插入到一个SERVLET的doGet方法中,他会每一秒钟向客户端发送当前的时间 response.setContentType(CONTENT_TYPE); ServletOutputStream os = response.getOutputStream(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); while(true){ try{ String str = format.format(new java.util.Date()); str = "<script>alert('"+str+"');</script>"; byte[] pdu = str.getBytes(); os.write(pdu); os.flush(); logger.info(Thread.currentThread().getName()+" 发送 "+str); try{Thread.sleep(1000);} catch(InterruptedException ex){} }catch(IOException e){ System.out.println(Thread.currentThread().getName()+" 客户端断开连接"); break; } } 这个方法就是服务器推,并且对SESSION没有影响 用一个session记录上次的操作,(每次操作都记录操作的时间),然后在iframe自动刷新页里判断时间,如果有很长时间没动作,就用js关闭窗口 jsp代码出现错误(附上MYECLIPSE web程序)请告诉看看 struts2与freemarker生成静态页的问题 hibernate建表、插数据问题 一个js的问题 forward基础问题 在线等待朋友帮我解决一个乱码问题>>>>>急急心急如火! 我的JAVA脚本语言调试不出来,帮我调呀,是哪儿出错了好不好? 求助!投票系统如何进行多项选择? 一个JSP中的小问题,多谢. 求java实现多车辆、多地点配送路径规划问题(VRP) 简单题,大分数!~~~~(快来看啊!) 求帮助:weblogic 连接池老down!
页面刷新时间一般为6秒钟一次(一般聊天室的刷新就是4~6秒,在这里可以根据你自己的需要来调整比如说30秒刷一次),也就是说当你关闭你所有的网页2分种后,服务器端关于你的session就会消失,如果你不关闭网页原理上是永远都不会消失,这样你即可以做到实时,又可以让session消失,因为两分种时间差不是太大,所以感觉上是很实时的了。
不知是不是满足要求?
至于记录每次操作的时间也不麻烦啊,你的网面中肯定有公用的文件对吧,比如说:head.jsp,等...,在这样的页面中,把用户的当前操作时间写到那个session中不就行了吗?这就是在聊天室中,多长时间不说话被自动踢出聊天室的原理,楼主好好的看一下吧。如果你不用这种方法,再也没有别的更好的方法了。
response.setContentType(CONTENT_TYPE);
ServletOutputStream os = response.getOutputStream();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while(true){
try{
String str = format.format(new java.util.Date());
str = "<script>alert('"+str+"');</script>";
byte[] pdu = str.getBytes();
os.write(pdu);
os.flush();
logger.info(Thread.currentThread().getName()+" 发送 "+str);
try{Thread.sleep(1000);} catch(InterruptedException ex){}
}catch(IOException e){
System.out.println(Thread.currentThread().getName()+" 客户端断开连接");
break;
}
}