The are many tutorials on the Internet that will show how many active users are
on a website. Here is one – http://www.4guysfromrolla.com/webtech/061399-2.shtml
. But, it can be a bit trickier to extend this to give a list of the active users.
In the example I going to show you, I will store the users in an XML file. This
method may not be perfect, but may suit the needs of many.
After a user logs in, we can store their details in XML. The file below can
be included in each page. All the demo files can be downloaded from link at
the bottom of the page. When a page is loaded the following actions are performed:
1.
The XML is loaded from disk (the folder containing the XML file must have
the correct permissions to write to it)
2. Users are removed from the file that haven’t visited a page in the last
5 minutes (this is stored in the UserTimeout variable and can be changed)
3. Any reference to the current user is also removed.
4. A timestamp is added for the current user.
5. The XML file is then saved to disk.
Another include file is then used to show the users. This is included in the
demo files below.
<% 'This file goes on every page that is is protected Session.LCID=2057 XmlFile=Server.MapPath("xml/users.xml") Username=Session("MM_Username") UserTimeout=5 'A 5 minute timeout seems reasonable ExpiryDate=IsoFormat(dateadd("n",-UserTimeout,Now)) Set objXML = Server.CreateObject("Microsoft.XMLDOM") objXML.load(XmlFile) set objNodeXML=objXML.documentElement RemoveOldNodes RemoveUserNodes AddUserNode objXML.Save XmlFile Set objXML = Nothing function RemoveOldNodes set OldNodes=objNodeXML.selectNodes("user[@date < '" & ExpiryDate & "']") if IsObject(OldNodes) then for each nd in OldNodes objNodeXML.removeChild(nd) next end if end function function RemoveUserNodes set CurrentUserNodes=objNodeXML.selectNodes("user[@username='" & Username & "']") if IsObject(CurrentUserNodes) then for each nd in CurrentUserNodes objNodeXML.removeChild(nd) next end if end function function AddUserNode set newNode=objXML.createNode(1,"user","") newNode.setAttribute "username",Username newNode.setAttribute "date",IsoFormat(now) objNodeXML.appendChild(newNode) end function function IsoFormat(t) IsoFormat=year(t) & FormatDT(month(t)) & FormatDT(day(t)) & FormatDT(Hour(t)) & FormatDT(minute(t)) & FormatDT(second(t)) end function function FormatDT(o) if len(o)=1 then FormatDT="0" & o else FormatDT=o end if end function %>