java033 2009-01-06 23:47
浏览 893
已采纳

iframe 这样刷新系统,不能保持session有效吗?

想实现功能:只要网页不关闭,session永远不过期;



实现方法:



1.在系统主页中,加入一个iframe,引用刷新页面:

<iframe id="iframe_00" frameborder="no" border="0" style="width:0;height:0" src="/html/refresh.jsp"></iframe>



2.刷新页面的内容如下,每15分钟重新刷新一次,加载本页面;

refresh.jsp的内容如下:



<html>

<head>

<title>refresh</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script type="text/javascript">

function _refresh(){//alert('test');

window.location.reload();

}

var timer = window.setTimeout(_refresh,15*60*1000);

</script>

</head>

<body>



<%

String uid=cn.com.web.SessionHelper.getSessionUserId(request);

//System.err.println("session user id == "+uid);

%>



</body>

</html>





问题:



1.刷新页面肯定有执行,我有打印出内容查看,打印出来的登录名也是正确的;



2.系统到了web.xml中设定的session失效时间后,session依然失效,跳转到登录页面;

<session-config>

<session-timeout>300</session-timeout>

</session-config>



真是找不到解释的理由了,,大家帮我看看....



谢谢
问题补充:
针对各位朋友的答案:



补充一下::



1.我详细对比了比的请求的sessionId,值是一样的;



2.我单机服务器使用的是weblogic814,不会产生这种问题;



3.部署到生产机,,使用weblogic814集群,有两台服务器,才产生失效的问题;



4.加入以下测试代码:



long last=session.getLastAccessedTime();

long now=new java.util.Date().getTime();

int max=session.getMaxInactiveInterval();



java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.err.println("MaxInactiveInterval=="+session.getMaxInactiveInterval()+"  LastAccessedTime=="+sdf.format(new java.util.Date(last))+"  now time=="+sdf.format(new java.util.Date(now))+"  invaid time == "+(max-((now-last)/1000)));//个人认为,最后一个时间是,离session失效的时间.,打印出来的结果是,,还需要115秒才失效,,可是,,前台已经失效了;



打印出的结果是:



>>MaxInactiveInterval==120  LastAccessedTime==2009-01-07 15:33:19  now time==2009-01-07 15:33:25  invaid time == 115

>>MaxInactiveInterval==120  LastAccessedTime==2009-01-07 15:33:25  now time==2009-01-07 15:33:30  invaid time == 115

>>MaxInactiveInterval==120  LastAccessedTime==2009-01-07 15:33:30  now time==2009-01-07 15:33:35  invaid time == 115

>>MaxInactiveInterval==120  LastAccessedTime==2009-01-07 15:33:35  now time==2009-01-07 15:33:40  invaid time == 115

>>MaxInactiveInterval==120  LastAccessedTime==2009-01-07 15:33:40  now time==2009-01-07 15:33:45  invaid time == 115

>>MaxInactiveInterval==120  LastAccessedTime==2009-01-07 15:33:45  now time==2009-01-07 15:33:50  invaid time == 115

>>MaxInactiveInterval==120  LastAccessedTime==2009-01-07 15:33:50  now time==2009-01-07 15:33:55  invaid time == 115





还没有答案,,,真是奇怪...






问题补充:
<session-config>

<session-timeout>300</session-timeout>

</session-config>



单位应该是,分钟,,,300/60.应该5小时.?
问题补充:
不好意思,,,为了做测试::



我现在改了配置文件,,,以上的打印结果是基于新配置文件的...





<session-config>

<session-timeout>2</session-timeout>

</session-config>

//2分钟



function _refresh(){

   window.location.reload();

}

var timer = window.setTimeout(_refresh,5*1000);



//5秒钟刷新一次



说明一下,,后来的打印一却都是自己需要的结果,,,打印的都是正确的....



但是,,2分钟时间到了,,照样跳转出登录页面;





集群,session复制问题:



集群我不太熟悉,,是别的公司配置的,,采用的是array,,(我没用过,呵呵,,一点不懂),,,,他现在的算法是,,一个IP,一定时间内的访问都固定在一台服务上,,这样想过去,,应该不存在session复制问题.,


问题补充:
集群,使用Array的负载均衡.



因为客观原因,分流配置是别的公司做的..



我们这里不太了解这个东西..



要沟通,,需要找比较有效的证剧,,证明和它们有关系,,,比较麻烦..
问题补充:
他们采用的算法是,,



比如,,A IP 这次访问请求,,在此10小时内访问,,都是固定在server 1,,



没有session 的复制,,,减小系统开支..



照这样看的话,,应该就不存在因为服务器session不同步而产生这个问题,,



日志的打印结果也证明,,打印的内容,,比如保存在session中的用户的登录账号,,一直都是正确的...
问题补充:
引用
两个服务器,分别添加一个测试页面; 看看是否客户端,随机访问了2台服务器,而不是按照Session的保持关系.




这个可以肯定,,确实随机访问了其中一台服务,,直到这个这个请求终止,,都是这台服务在响应.
问题补充:
引用
1.在你本地机器测试,看是否有问题;

2.在服务器测试,看是否只有Array的情况下有问题;

3.如果不是Array也有问题,那就是集群的配置问题;




本地是没问题的;



array,和集群问题因为不熟悉,不好测试,,

单起一台服务也是会超时;




问题补充:
引用
直接JS 写一个刷新的不就行了, 为什么不改下服务器的session周期




写JS刷新效果是一样的,,



到于改session周期,,真是一言难尽,,,不知道改多大为好..



这样的需求属于客户要求问题,,我改了5小时了,,,他一晚上不关机,,,照样超时,,我要是改成12小时,,,他要是周未不关机怎么办??



那我总不能改成无穷大吧????



想不明白呀,,,不知道怎么调试了....
问题补充:
问题解决:原因是系统中引用了第三方的JAR包,跟踪后,发现这个JAR包中有个方法会在session超时时间到后,,自动去清除会话,而不管你这个session的last access time....



将这个JAR包去除后,,,系统正常....



具体原因还是不清楚,,感觉不可思议.....



为什么本机开发的时候不会出这个问题呢???weblogic的部署模式有关系吗???



是和操作系统有关系吗?



待以后了解...
  • 写回答

12条回答

  • bohemia 2009-01-07 17:03
    关注

    这里不多讨论了.
    建议你用排除法:
    1.在你本地机器测试,看是否有问题;
    2.在服务器测试,看是否只有Array的情况下有问题;
    3.如果不是Array也有问题,那就是集群的配置问题;

    :)希望早点解决.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿