普通的用户login,logout是经常会用到的,但如果要求单人登入呢?当某用户已经登录时就不能够现 再次登录,这种情况加以逻辑判断就可以完成.但有时用户会不按注销按钮,而直接关闭浏览器,此时就要等到session结束时才能够再次登录了,当session设成较大值时,这种情况就需要比较长时间的等待.此时,可以用JavaScript响应浏览器的关闭事件,强制结束session.代码如下(以下代码仅在IE中有效):
现在问题又来了,当出现某些突发情况,如断电,电源不小心弄开等,这时用户既没有点注销也没关闭浏览器,当用户想要再登录时还是需要等到session结束,为了减少这种情况的等待时间,可以适当减小session的timeout,而当session的timeout过小时,可以当用户登录后,期间去上了次WC或接了个电话后,session就过期了,又要重新登录,有点麻烦.这种情况又可以用这种方式来处理,在客户端用AJAX异步轮询的请求SERVER的某个空页面,达到定期激活session的目的,代码如下(以下代码仅在IE中有效):
在OnSession.aspx页中:
另一种方法是,在页面中隐藏一个iframe,同样是做轮询的刷新页面:
这种方法每次刷新页面也会刷新浏览器的进度条。
这里只列出了实现方式,具体性能相关需要具体情况具体分析。
function closeFun()
{
if(event.clientY<0||event.altKey==true)
{
var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp.open("get","OnClose.aspx",false);
xmlHttp.send(null);
}
}
window.onbeforeunload=closeFun;
{
if(event.clientY<0||event.altKey==true)
{
var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp.open("get","OnClose.aspx",false);
xmlHttp.send(null);
}
}
window.onbeforeunload=closeFun;
现在问题又来了,当出现某些突发情况,如断电,电源不小心弄开等,这时用户既没有点注销也没关闭浏览器,当用户想要再登录时还是需要等到session结束,为了减少这种情况的等待时间,可以适当减小session的timeout,而当session的timeout过小时,可以当用户登录后,期间去上了次WC或接了个电话后,session就过期了,又要重新登录,有点麻烦.这种情况又可以用这种方式来处理,在客户端用AJAX异步轮询的请求SERVER的某个空页面,达到定期激活session的目的,代码如下(以下代码仅在IE中有效):
function myRefresh()
{
var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp.open("get","OnSession.aspx",false);
xmlHttp.send(null);
window.setTimeout("myRefresh()",30000);
}
myRefresh();
{
var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp.open("get","OnSession.aspx",false);
xmlHttp.send(null);
window.setTimeout("myRefresh()",30000);
}
myRefresh();
public partial class OnSession : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.Response.Expires = -1;
}
}
{
protected void Page_Load(object sender, EventArgs e)
{
this.Response.Expires = -1;
}
}
<iframe id="iframe1" width="0" height="0"></iframe>
<script type="text/javascript">
window.setInterval('document.getElementById("iframe1").src="OnSession.aspx";',30000);
</script>
<script type="text/javascript">
window.setInterval('document.getElementById("iframe1").src="OnSession.aspx";',30000);
</script>
这里只列出了实现方式,具体性能相关需要具体情况具体分析。