日期:2014-05-18  浏览次数:20421 次

还是关闭页面改变用户在线状态!(高手请进!!!!!!!!)
用session_end总是要等session失效以后才能触发。。

这是我捕获的session状态

9/5/2007   1:07:54   PM         Application   Start
9/5/2007   1:07:56   PM         Session   Start
9/5/2007   1:18:40   PM         Session   End

我本来1:07:56   PM   登录了马上就退出了,结果到18分才执行session   end(我设置了10分钟session)
怎么能在用户关闭页面的时候执行啊

onunload不好,刷新页面的时候也会执行!

难道真要定时不停刷新状态才行

------解决方案--------------------
up
------解决方案--------------------
点“退出” 导到退出页面 执行Session.Abandon 不就行了
------解决方案--------------------
试试在Application_End事件中写你要处理的事件。
再或者就是获得IE关闭时的handle,然后把Session清空。这样就可以触发Session_End事件了。
要获得IE关闭的事件可以使用API
------解决方案--------------------
还可以使用Javascript中的事件,当该窗体关闭的时候,可以利用Javascript获取关闭事件,然后就可以写你自己的操作过程了。
------解决方案--------------------
to ahone:
============
Session.Abandon是将服务器上的所有session都删除~~

退出登陆时尽量用清空的方法,而不要用Session.Abandon这删除的方法~~

如:session( "userid ") = " "
直接将session( "userid ")变量置空即可`~`
------解决方案--------------------
试试window.onbeforeunload 事件~
------解决方案--------------------
你的“马上就退出了”是什么概念?如果是用户经过某种操作 如通过点击事件退出 那在关闭事件里调用服务器来事件来清空session就行了(通过ajax实现)

如果是通过关闭IE窗口判定 用onunload事件是不准确的 刷新也调用此事件
反过来说 所有IE窗口都关闭了 session也就失效了啊 你要处理的操作正好放在了session_end里
这自然就达到了要求
------解决方案--------------------
js js js js js js js js js js js js js js js jsjs js js js js js js jsjs js js js js js js jsjs js js js js js js jsjs js js js js js js js
function window.onunload()
{
if(window.event.clientX <0)
{
// window.opener=null;
MainFrame.CancelUser();//执行后台,释放session
}
}


------解决方案--------------------
用window.onunload事件实现你的要求。window的onunload事件只会在关闭时发生,body.onunload每次刷新都运行
------解决方案--------------------
没有用ajax.定时请求服务器.由google的analytics的代码想到的..请求一个空白页面.
测试了还不错.可以将session时间设置短暂一点.我每1分钟请求一次.session2分钟后过期.

<script language= "javascript " type= "text/javascript ">
//保持session
function SetSession()
{
var i = new Image(1,1);
i.src = "SessionPage.aspx ";
i.onload = function() {LoadVoid();}
}

function LoadVoid()
{
return true;
}
//设置时间间隔
setInterval( "SetSession() ",10000);
</script>

Session_End事件当中调用用户logout的函数即可.