在写一个客户的B/S结构应用程序时突然发现一个技巧不知道是否是MS的一个BUG给相关的有研究的朋友原先考虑写一个检查Session的类Session失效后必须转向登陆页面可每一个调用该类的页面在不同的Web路径下所以转到登陆页面的URL都不同每个页面都要调用和设置登陆页面路径所以实际应用就放弃了这一想法后来考虑到不如写一个检查Session失效的页面由客户端每一秒都刷新一下就可以在一个页面中调用但通过FRAME嵌入该ASPX老时有请求发出不太好看虽然该页面是隐藏的再后来想想就用一个页面使用无刷新技术去请求该失效Session的页面就可以了此处的无刷新技术使用了XMLhttp对象没有使用WebService技术(由于客户的BS系统使用FRAME框架最上层的页面是显示软件名称用户登陆信息的所以调用就放在该页面中)
让我们来看看代码主要是客户端的JavaScript脚本程序
<script language=javascript>
var idx=;
function ChkSession()
{
var Http = new ActiveXObject(MicrosoftXMLHTTP);
Httpopen(GETChkSessionOutaspxfalse); //检查Session失效的页面
Httpsend();
var str = HttpresponseText;//执行ASPX后的返回结果
//idx++
//documentall(ConvertResult)innerHTML = str+idx;
if(str==notnull)
{
//alert(str);
}
else
{
alert(会话值跟蹤时间超时请重新登录);//这段代码一直没有运行往下看你就知道了
locationhref = longinaspx;
}
windowsetTimeout(ChkSession() );//每一秒钟请求一次ChkSessionOutaspx
}
</script>
这段CODE我放在<HEAD></HEAD>标签之间然后在BODY加载时调用该函数如下
<BODY onload=ChkSession();>
ChkSessionOutaspxcs的代码如下ChkSessionOutaspx文件中的HTML标签全部被我删除这样一来执行下面的代码就只有结果的输出了
private void Page_Load(object sender SystemEventArgs e)
{
if(Session[sUserID]==null)
{
ResponseWrite(isnull);
return;
}
else
{
ResponseWrite(notnull);
return;
}
}
[] []