OK, I DON'T KNOW WHY NOONE AT ANY OF THE FORUMS KNEW MUCH ABOUT THE SESSION_ONEND EVENT (OR RATHER "SUBROUTINE") OTHER THAN THE FACT THAT IT'S <b>ENTIRELY</B> UNRELIABLE. BUT I FIGURED OUT A LOT ABOUT IT, AND WHAT YOU <B>CAN</B> AND <B>CANNOT</B> DO WITH IT, BY USING A BIT OF LOGIC. I KNOW I'VE GOTTEN A LOT OF PEEOPLE WHO TRIED TO HELP ME, MOSTLY TO NO AVAIL, BECAUSE NOONE UNDERSTOOD THE CAPABILITIES, AND PARAMATER LIMITS, OF THIS EVENT, AS MUCH AS WAS REQUIRED TO IN ORDER TO RESOLVE THIS ISSUE, (WHICH I FOUND OUT, THE INTERNET FORUMS ARE <B>FILLED</B> WITH PEOPLE WANTING TO DO THE SAME THING, BUT FOR SOME REASON, NOONE WAS ABLE TO HELP, I GUESS EITHER NOONE KNOWS THIS TRICK, OR ALL THE PEOPLE WHO DO AREN'T TALKING). OK NOW, FOLLOW ALONG:
************************************************** ************
MY TUTORIAL FOR MAKING SURE THE DB ENTRY IS MADE FOR A USER WHO DID NOT LOG OUT WITH THE LOGOUT BUTTON, (EG. LEFT THE SITE, OR CLOSED THE BROWSER);
************************************************** ************
OK, NOW I KNOW FROM BEING ALL OVER THE NET, SEARCHING FOR A RESOLOUTION, BEFORE I GAVE UP AND JUST SAT HERE TILL I FIGURED IT OUT, THAT ALMOST ALL OF YOU HAVE SEEN THE VERY POPULAR CODE EXAMPLE FOR FINDING THE NUMBER OF CURRENT USERS CONNECTED, IT USES THE APPLICATION("YOUR VARIABLE NAME HERE") VARIABLE IN INCREMENT THE NUMBER OF USERS HOLDING A SESSION ID, WELL IF YOU LOOK IN THAT EXAMPLE, YOU'LL SEE THAT THE SEESION_ONEND EVENT IS ACTUALLY EXECUTING <B>SOMETHING</B>, SO YOU KNOW YOU CAN EXECUTE A SCRIPT IN IT. NOW WHAT A LOT OF PEOPLE HAVEN'T FIGURED OUT, IS THAT YOU <B>CANNOT</B> USE A REPLY OR REQUEST METHOD IN THAT EVENT. ALSO, IT IS NOT THE NETWORK SERVICE OR IUSER THAT IS USING A PERMISSION TO EXECUTE THAT EVENT, IT IS ACTUALLY THE "LAUNCH IIS PROCESS ACCOUNT (IWAM_YOURPCNAME)" SO YOU'LL HAVE TO SET THE PERMISSION SETTINGS FOR THE DIRECTORY THAT THE DB IS IN TO ALLOW THAT ACCOUNT TO EDIT IT'S CONTENTS, FOR SOMPLICITY, I ALLOWED THAT PERMISSION TO THAT ACCOUNT FRO THE WHOLE DIRECTORY CONTIANING THE DB AND THE GLOBAL.ASAX FILE. NOW, BACK TO THE COUNTER EXAMPLE, YOU SEE IN THE EXAMPLE, WHERE IT STORES, IN THE SESSION_ONSTART EVENT, A VARIABLE TO THE APPLICATION("YOURVARIABLENAME") VARIABLE? WELL YOU REMEMBER HOW IN THAT EXAMPLE, YOU CALLED TO THAT VARIABLE FROM YOUR ASP OR ASPX PAGE? EG: "<%= RESPONSE.WRITE (APPLICATION("MYVARIABLENAME").TOSTRING)?
OK, WELL NOW IF YOU THINK ABOUT IT, THAT MEANS THAT THE APPLICATION VARIABLE IS ACCESABLE OUTSIDE OF THE SESSION_ONSTART SUBROUTINE. SO THEN, WHY CANT WE USE THAT VARIABLE IN THE SESSION_ONEND SUBROUTINE, SINCE WE <b>CAN'T</B> USE SOMETHING LIKE "REQEST.COOKIE" OR "RESPONSE.REDIRECT"? WELL THE GOOD NEW IS: YOU CAN. AND HERE'S HOW I DID IT:
************************************************** ************
<%@ IMPORT NAMESPACE="SYSTEM.DATA"%>
<%@ IMPORT NAMESPACE="SYSTEM.DATA.OLEDB"%>
<%@ LANGUAGE="VBscript" %>
<script language="
VB" runat="server">
Sub Application_OnStart
Application("Active")=0
End Sub
Sub Application_OnEnd
'no code is needed here
End Sub
Sub Session_OnStart
Session.Timeout=1
Session("Start")=Now
Application.Lock
Application("Active")=Application("Active")+1
dim this
IF REQUEST.Cookies ("CK") IS NOTHING THEN
RESPONSE.REDIRECT("LOGIN.ASPX")
ELSE
APPLICATION("CK") = REQUEST.Cookies ("CK")("UID").TOSTRING()
Application("uid") = REQUEST.Cookies("CK")("UID")
DIM CN222 AS new OLEDBConnection
DIM CMV222 AS STRING
DIM CM222 AS NEW OLEDBCOMMAND
CN222 = new OLEDBConnection("PROVIDER=MICROSOFT.JET.OLEDB.4.0; Data Source=Z:\WWW\MEMBERS\GRIM.mdb")
CMV222 = "UPDATE REG SET ONLINE='" & "YES" &"' WHERE UNAME = '" & Application("uid") &"'"
CM222 = NEW OLEDBCOMMAND(CMV222,CN222)
cn222.open()
CM222.EXECUTENONQUERY()
CN222.Close
CN222 = NOTHING
response.write("<BR>eeeeee<BR>" & Application("uid") )
Application("this") = Session.SessionID
END IF
Application.unlock
End Sub
Sub Session_OnEnd
DIM UID = Application("uid")
DIM CN222 AS new OLEDBConnection
DIM CMV222 AS STRING
DIM CM222 AS NEW OLEDBCOMMAND
CN222 = new OLEDBConnection("PROVIDER=MICROSOFT.JET.OLEDB.4.0; Data Source=Z:\WWW\MEMBERS\GRIM.mdb")
CMV222 = "UPDATE REG SET ONLINE='" & "no" &"' WHERE UNAME = '" & UID &"'"
CM222 = NEW OLEDBCOMMAND(CMV222,CN222)
cn222.open()
CM222.EXECUTENONQUERY()
CN222.Close
CN222 = NOTHING
Application.Lock
Application("Active")=Application("Active")-1
Application.unlock
end sub
</SCRIPT>
************************************************** ************
NOW KEEP IN MIND, I SET MY SESSION.TIMEOUT TO 1 MINUITE, SO I DIDN'T HAVE TO WAIT AS LONG TO SEE IF IT WORKED, YOU MAY WANT TO CHANGE THAT <b>AFTER</B> YOU TEST IT FOR YOURSELF, AND ARE SATISFIED THAT IT WORKS FOR YOU.
************************************************** ************
ALSO, IT IS IMPORTANT TO REMEMBER THAT I HAVE ONLY BEEN TEACHING MYSELF PROGRAMMING FOR A LITTLE OVER 2 WEEKS NOW, SO SOME PARTS OF MY EXAMPLE MAY NOT BE THE BEST PRACTICES, AND IF YOU DO FIND SOMETHING WRONG WITH IT, PLEASE REPLY TO THIS, WITH THE ERROR YOU FOUND, SO THAT OTHERS ARENT MISLEAD. I AM NOT IMPLYING THAT THIS IS A BULLETPROOF WAY TO DO THINGS, ALL I AM IMPLYING IS THAT IT WORKED FOR ME, AND EVEN IF IT'S A LITTLE INEFFICIENT, IT FITS MY NEEDS JUST FINE, CONSIDERING NOONE ESLE COULD EVEN GET IT TO WORK.
************************************************** ************
THANK YOU ALL FOR THE HELP AND MOST IMPORTANTLY, ALL THE LINKS TO VALUABLE REFERENCE MATERIAL ON THE WONDERFULL RESOURCE WE CALL THE NET.
-------------------------------------------
ALEX GRIM
HTTP://WWW.GRIMMUSIC.COM
GRIM@GRIMMUSIC.COM
WWW.GRIMMUSIC.COM