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个回答

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

:)希望早点解决.

写到cookie里吧

恩,这个功能还不错哦!可以实现~
可能你后台设的是15分钟,那么你应该14分钟就刷新一下。

老问题了
为什么人就是不会用google了?

http://blog.csdn.net/sunyujia/archive/2008/06/21/2574006.aspx

[quote]function _refresh(){//alert('test');
window.location.reload();
}
var timer = window.setTimeout(_refresh,15*60*1000); [/quote]

15*60*1000 = 15分钟

[quote]
300
[/quote]
300/60=5分钟

服务器在5分钟内就过期.而你客户端的访问时间是15分钟,肯定超过了..
15*60*1000 修改小一点,比如: 4*60*1000 这样就应该可以;

那你应该查看两台服务器是不是做了session共享

[quote]MaxInactiveInterval==120 [/quote]
Session的最常等待时间:120秒

[quote]
300
[/quote]
这个按照你的意思是 5个小时;

肯定有地方配置不一致; 如果都正确,两者应该一致;

另外,可在单机判断,是否由于集群导致的问题;

是集群? 还是用Array的负载均衡?

如果是集群,可能是配置的问题; (是否是这个原因,可以采用单台服务器,测试下,就明确了)

如果是负载均衡硬件/软件; 这个会话保持的.要负载均衡上进行配置.要不是容易出问题的..

比如,第一次访问服务器A,第二次访问了B,而B未保存客户的Session,就出问题了吧.

[quote]如果是负载均衡硬件/软件; 这个会话保持的.要负载均衡上进行配置.要不是容易出问题的..

比如,第一次访问服务器A,第二次访问了B,而B未保存客户的Session,就出问题了吧.[/quote]

两个服务器,分别添加一个测试页面; 看看是否客户端,随机访问了2台服务器,而不是按照Session的保持关系.

为什么不改下服务器的session周期

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问