在Session_End事件中判断就可以了。
解决方案 »
- 我发现一个问题,就是我的程序在98上执行得非常慢。请问,你怎么来判断这是程序本身的问题还是软硬件系统的问题?
- 下载文件名称长度限制
- 问下asp.net双语版网站(中文和俄文) 数据库该如何设计?
- 标签设计
- 求,表格滚动时,表头不动,表内数据滚动
- window.parent.dialogArguments (asp.net +vb.net)
- as.net数据库查询的问题
- 变量的小问题!比较急!
- Response.AddHeader("Refresh","10")的实现机制是什么?
- .aspx 文件不能运行!!!!
- 在一个DataGrid中要让读出的数据分成两行排列,而且要求编辑、添加、删除都能用,要怎么做?
- 一个SqlCommand执行两条删除语句,怎么写?
AspNetPager 免费分页控件4.2版发布,同时发布最新源代码,欢迎下载:http://www.webdiyer.com
function window.onunload()
{
if (event.clientX <0 && event.clientY <0 )
{
window.open("logout.aspx","logoout");
}
}
</script>
在logout.aspx中,修改数据库状态吧,别忘了调用<% Session.Abandon() %> :)
function window.onunload()
{
if(event.clientX<0 && event.clientY<0)
{
<%# SignOut()%>
}
}cs中public void SignOut()
{
//获得用户值
//更新数据库
}
</script>
对于断电和其他非正常因素,可以采用xmlhttp来维持客户端和服务器端的状态,如果一定时间内(例如15秒)服务器端接收不到客户端的状态信息,则判定为断线客户端:
<script language=javascript>function SendStateMessage()
{
var szRequest = "<State myState='";
szRequest += 1;
szRequest += "'></State>";
var objHTTP = new ActiveXObject("Microsoft.XMLHTTP");
var szURL = "some.aspx";
var szHttpMethod = "POST";
objHTTP.Open(szHttpMethod, szURL, false);
objHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
objHTTP.Send(szRequest);……
}
然后服务器端再用xmlDom接收……有点麻烦,呵呵
不过这种方式无法控制断电之类的问题,解决直接关闭浏览器还是没问题的:)
就是做一个隐藏的页定时刷新数据库,
还有得在online加一个最后登录时间字段,
这样在定时刷新页面里每刷新一次就更新最后在线时间,并且更改超过规定时间没有刷新的用户状态;
当用户非正常退出时重新登录就得先把规定时间没登录的用户记录更改状态先。这样好象要和DB打的交道太多了,而且我怀疑没说清楚··
否则还没退出,则把字段tim更新为当前时间,以备下一次刷新时比较用只要有用户打开该页面就会检查字段tim和当前时间的差
注意,这里的检查是检查online表所有的用户
Session_End()仅用于用户Session超时和正常退出时才有效
一般用户不会正常退出的!!!可以使用下面的方法.
(1)页面方式时:(刷新iframe要尽量小)建立一个实时在线用户表(online表),用户登录后将uptime写为登录时间.设定一个时间差t,比如1分钟每1分钟后页面刷新,有客户端的用户,将用当前系统时间更新uptime字段,无客户端的用户(既退出者)因未刷新将不再更新
每次刷新时,用当前时间与online表所有用户的uptime进行比较.如时间差大于1分钟,则表示用户已退出.
(2)用页面嵌入winform的方式时可以从客户端定时发送xml数据包来决定