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 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多