> I'm trying to capture the session end event. I put a spot of code in the
> Session_End event in the Global.asax.vb file. The function simply writes
> to a database table logging the event. I have the same function in the
> Session_Begin and the Application events. I am capturing the Session
> beginning and the App begin and end but no Session end. My end goal is to
> capture some session objects before it dies and log it.
1) What are you using for session management? If you're not using inproc
sessions, Session_End won't fire...
2) Are you certain there isn't an error in your Session_End code...?
3) Are you absolutely certain that Session_End isn't firing...? How are you
calling it? Obviously, Session_End doesn't fire when you close the client
browser - you have to make it happen manually, or let it happen
automatically when the session eventually times out...

Signature
Mark Rae
ASP.NET MVP
http://www.markrae.net
David Lozzi - 02 Oct 2007 15:34 GMT
Hi Mark,
1. Using SQL.
2. I am as sure as I can be. See script below
3. I'm assuming it will occur when it times out.
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Fires when the session ends
common.SessionLog(3)
End Sub
Public Shared Function SessionLog(ByVal LogType As Integer)
Dim ID As String = ""
Dim Parts As String = ""
Dim SessionID As String = ""
Dim customer As String = ""
Dim email As String = ""
Dim uniSession As UniSession = Nothing
Try
Select Case LogType
Case 1
' Application Start
email = "admin"
ID = LogType & "_AppStart_" & IConvD2(Now) & "_" &
IConvMTS(Now) & "_" & CompanyCode
Case 2
' Session Start
SessionID = Current.Session.SessionID.ToString
ID = LogType & "_SessStart_" & SessionID & "_" &
IConvD2(Now) & "_" & IConvMTS(Now) & "_" & CompanyCode
Case 3
' Session End
SessionID = Current.Session.SessionID.ToString
customer = Current.Session("CustomerNum")
email = Current.Session("CustomerEmail")
Dim bag As ArrayList = Current.Session("ShoppingBag")
For Each i As BagItem In bag
Parts &= i.PartNo & "-" & i.Name & " :: "
Next
ID = LogType & "_SessEnd_" & SessionID & "_" &
IConvD2(Now) & "_" & IConvMTS(Now) & "_" & CompanyCode
Case 4
' Application End
email = "admin"
ID = LogType & "_AppEnd_" & IConvD2(Now) & "_" &
IConvMTS(Now) & "_" & CompanyCode
End Select
uniSession = UOOpenSession()
Dim uf As UniFile = uniSession.CreateUniFile("BAG")
With uf
.RecordID = ID
.WriteField(1, Now)
.WriteField(2, Current.Session.SessionID)
.WriteField(3, CompanyCode)
.WriteField(4, Parts)
.WriteField(5, Current.Session("CustomerEmail"))
.WriteField(6, customer)
.Close()
End With
Return True
Catch ex As Exception
UOCloseSession(uniSession)
Dim msg As New MailMessage
msg.From = New
MailAddress(ConfigurationManager.AppSettings("ErrorEmailFrom"))
Dim toEmails() As String =
ConfigurationManager.AppSettings("ErrorEmailTo").Split(";")
For i As Integer = 0 To toEmails.Length - 1
msg.To.Add(toEmails(i))
Next
msg.Subject = "Error on " &
Current.Request.ServerVariables("SERVER_NAME") & " Website"
msg.IsBodyHtml = True
msg.Body = "<font face=verdana size='2'><b>Error on " &
Current.Request.ServerVariables("SERVER_NAME") & " Website!</b><br>" & Now()
& "<BR><br>" & _
"<b>Page Name:</b>common.vb<br>" & _
"<b>URL:</b>" &
Current.Request.ServerVariables("URL") & "<br>" & _
"<b>Function Name:</b> SessionLog<br><br>" & _
"<b>Error Message:</b> " & ex.ToString
Dim smtpClient As New SmtpClient
smtpClient.Host = ConfigurationManager.AppSettings("SMTPServer")
smtpClient.Send(msg)
Return False
Finally
UOCloseSession(uniSession)
End Try
End Function
>> I'm trying to capture the session end event. I put a spot of code in the
>> Session_End event in the Global.asax.vb file. The function simply writes
[quoted text clipped - 12 lines]
> client browser - you have to make it happen manually, or let it happen
> automatically when the session eventually times out...
Mark Rae [MVP] - 02 Oct 2007 15:49 GMT
>> 1) What are you using for session management? If you're not using inproc
>> sessions, Session_End won't fire...
> 1. Using SQL.
Don't need to look any further than that, then...
Session_End() only fires for inproc sessions...
This hasn't changed since the last time you asked... :-)
http://www.thescripts.com/forum/thread574994.html

Signature
Mark Rae
ASP.NET MVP
http://www.markrae.net
David Lozzi - 02 Oct 2007 16:35 GMT
D'OH -- I thought I asked this once before.... Well, then, this is
embarassing...
What are my options then? I need to capture an abandoned session's objects.
Also, how does a session never end when it's on SQL? Or does it and it
doesn't tell IIS/Web site about it?
Thanks,
>>> 1) What are you using for session management? If you're not using inproc
>>> sessions, Session_End won't fire...
[quoted text clipped - 7 lines]
> This hasn't changed since the last time you asked... :-)
> http://www.thescripts.com/forum/thread574994.html
Mark Rae [MVP] - 02 Oct 2007 16:43 GMT
> D'OH -- I thought I asked this once before.... Well, then, this is
> embarassing...
Happens to the best of us... :-)
> What are my options then? I need to capture an abandoned session's
> objects.
This may help:
http://www.velocityreviews.com/forums/t73124-sessionend-and-sqlserver-session-mo
de.html
> Also, how does a session never end when it's on SQL?
It does end.
> Or does it and it doesn't tell IIS/Web site about it?
Correct.

Signature
Mark Rae
ASP.NET MVP
http://www.markrae.net
> Howdy,
>
[quoted text clipped - 8 lines]
>
> David Lozzi
http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet/search?g
roup=microsoft.public.dotnet.framework.aspnet&q=session_end
The difference between Sesssion_Begin and Session_End is that
Response/Request objects available in first event and null in another event.
so show us a code and do not say it's the same.....
George.
> Howdy,
>
[quoted text clipped - 8 lines]
>
> David Lozzi