在.net中的global.asax中有Application_AuthenticateRequest事件和Application_BeginRequest事件是在每次访问aspx文件都会触发。但是Application_BeginRequest中不能对已经经过FROMS身份验证的身份ticket票进行识别。所以只能放到Application_AuthenticateRequest中去。
我的实现原理是:每次访问aspx文件时候都会判断在线表里面是否有这个用户(已经登录了的记录用户名,没有登录的记录IP地址),如果不存在,则将该用户的身份、最后访问时间、最后访问IP、和最后访问的URL存入数据库。如果数据库中已经曾在,则更新该记录,把最后访问时间,IP以及最后访问URL更新。
各位高手帮帮忙,小女子先谢过了!
我的实现原理是:每次访问aspx文件时候都会判断在线表里面是否有这个用户(已经登录了的记录用户名,没有登录的记录IP地址),如果不存在,则将该用户的身份、最后访问时间、最后访问IP、和最后访问的URL存入数据库。如果数据库中已经曾在,则更新该记录,把最后访问时间,IP以及最后访问URL更新。
各位高手帮帮忙,小女子先谢过了!
<%@ Page Language="c#" debug="true" %>
<html>
<head>
<SCRIPT LANGUAGE="c#" RUNAT="server">
private void Page_Load(object sender, System.EventArgs e)
{
Visitors.Text = "本站当前有: <b>" + Application["user_sessions"].ToString() + "" + "</b> 位访问者 !";
}
<title>在线用户</title>
</head>
<body>
<asp:label id="visitors" runat="server" /><br>
</body>
</html> global.asax文件:
<script language="c#" runat="Server">
protected void Application_Start(Object sender, EventArgs e)
{
Application["user_sessions"] = 0;
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["user_sessions"] = (int)Application["user_sessions"] + 1;
Application.Unlock();
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["user_sessions"] = (int)Application["user_sessions"] - 1;
Application.Unlock();
}
</script> 另外建议为什么不在Session_Start里面更新最后登录时间呢?是因为验证特殊需要么?
不过最好与用户登录验证方法结合一起, 登录的时候将用户的profile保存在全局变量里, 例如在asp.net 2.0里就保存在profile里.在Application_AuthenticateRequest的时候可以根据登记了的profile进行判断而进行更新数据库, 要注意一些地方, 比如是判断Request.Method, 如果是POST的就不执行计数, 因为总不能用户点击了submit button也要计一下数吧.
怪你动不动就搬出来“小女子”这样标题
说实在的,我也很烦这一类标题
早点结贴吧,我这里显示?号。