I. Principle
in. net, the application_authenticaterequest event and application_beginrequest event in global. asax are triggered every time the aspx file is accessed. However, in application_beginrequest, ticket tickets with froms authentication cannot be identified. Therefore, it can only be put in application_authenticaterequest.
my implementation principle is: Every time I access the aspx file, I will judge whether there is this user in the online table (the logged user name has been logged on, and no logged-on IP address ), if not, the user's identity, last access time, last access IP address, and last access URL are stored in the database. If the database already exists, update the record to update the last access time, IP address, and last access URL.
at the same time, delete the data in the database that is more than 20 minutes away from the current time (if no operation is performed for 20 minutes, the operation times out ).
III. Database Structure:
whether the length of the primary key field type is null
1uson_serialint40 No.
0uson_uservarchar200 User Name (IP address if no logon is performed)
0uson_companyvarchar1000 company name ('tourist 'if not logged in ')
0uson_ip varchar200ip address
0uson_datedatetime80 last operation time
0uson_urlvarchar1000 last operation page path
4. Program
note:
1. The program is located in global. asax
2. I am using Forms authentication
3. Please use the using system. web. security
Protected void application_authenticaterequest (Object sender, eventargs E)
{
String struserid = string. empty;
String strcompany = string. empty;
If (request. isauthenticated ){
Formsidentity identity = (formsidentity) user. identity;
Formsauthenticationticket ticket = identity. ticket;
Struserid = user. Identity. Name;
Strcompany = ticket. userdata. Split ("|". tochararray () [2];}
Else {
Struserid = request. userhostaddress;
Strcompany = "Tourists ";
}
Memberonlineinfo objonline = new memberonlineinfo (struserid, request. userhostaddress, datetime. Now. tostring (), request. filepath, strcompany );
Memberaccount account = new memberaccount ();
If (! Account. checkuseronline (struserid ))
Account. addonline (objonline );
Else
Account. updateonline (objonline );
// Delete the expired Member
Account. deleteonline ();
}