Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[ASP.NET] Session End?

17 views
Skip to first unread message

Klaus Petersen

unread,
Mar 19, 2004, 9:54:32 AM3/19/04
to
Hej NG.

Jeg sidder og bander lidt over min lille web applikation.

Problemet er, at jeg aldrig får min Session_End event.

Jeg har lavet et simpelt lille projekt, hvor jeg sætter Session.Timeout til
1 på Session_Start.

Så har jeg lavet en knap, som på sin OnClick handler kalder Session.Abandon
().

Hverken efter timeout, eller efter click på min knap får jeg session end.

Har nogen rodet med de samme problemer?

mvh.
Klaus


Marten Ølgaard

unread,
Mar 19, 2004, 11:03:00 AM3/19/04
to
Ligger din Global.asax fil i applikationens rodbibliotek ?

Ja, jeg ved godt det måske er banalt, men ud fra hvad du oplyser burde det
virke.

Post evt. din kode i global.asax og aspx filen

/Marten

"Klaus Petersen" <spec...@getTOnet.dk> wrote in message
news:7MD6c.476$JE3...@news.get2net.dk...

Kim Bach Petersen

unread,
Mar 19, 2004, 11:46:49 AM3/19/04
to
Klaus Petersen wrote:

> Problemet er, at jeg aldrig får min Session_End event.

Det skulle du nu gerne...

Min erfaring er, at Session_End falder første hele minut efter timeout.

> Har nogen rodet med de samme problemer?

Jeg har haft problemer med at der tilsyneladende er visse operationer, som
ikke udføres. Jeg har ikke kunnet klarlægge dette konkret, men har altid
fundet frem til noget, der virker.

Kim :o)
--
http://dotnet.kensho.dk


Klaus Petersen

unread,
Mar 22, 2004, 4:24:48 AM3/22/04
to
Her har i koden fra min global.asax.cs:

using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.IO;

namespace SessionTimeout
{
/// <summary>
/// Summary description for Global.
/// </summary>
public class Global : System.Web.HttpApplication
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

public Global()
{
InitializeComponent();
}

protected void log ( string message )
{
StreamWriter sw;

if ( File.Exists ( Server.MapPath ("/log.txt") ) )
sw = File.AppendText ( Server.MapPath ("/log.txt") );
else
sw = File.CreateText ( Server.MapPath ("/log.txt") );

sw.WriteLine ( DateTime.Now.ToString () + " - " + message );

sw.Close ();
}

protected void Application_Start(Object sender, EventArgs e)
{
log ("Application start!");
}

protected void Session_Start(Object sender, EventArgs e)
{
log ("Session start "+Session.SessionID);

Session.Timeout = 1;
}

protected void Application_BeginRequest(Object sender, EventArgs e)
{
}

protected void Application_EndRequest(Object sender, EventArgs e)
{

}

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{

}

protected void Application_Error(Object sender, EventArgs e)
{

}

protected void Session_End(Object sender, EventArgs e)
{
log ("Session End");
}

protected void Application_End(Object sender, EventArgs e)
{
log ("Application End");
}

#region Web Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
}
#endregion
}
}

Og her er log filen:

19-03-2004 15:40:06 - Session start 4ebobl45x3pbediuhcrzpp45
19-03-2004 15:40:41 - Application start!
19-03-2004 15:40:41 - Session start y5rxpp2gk3coy0ig5qetml3j
19-03-2004 15:42:33 - Session start 4ebobl45x3pbediuhcrzpp45
19-03-2004 15:42:52 - Session start vfczrj455zclbs55jzbwqqy5
19-03-2004 15:44:58 - Application start!
19-03-2004 15:44:59 - Session start vfczrj455zclbs55jzbwqqy5
19-03-2004 15:45:10 - Session start vfczrj455zclbs55jzbwqqy5
19-03-2004 15:45:42 - Session start vfczrj455zclbs55jzbwqqy5
19-03-2004 15:45:49 - Application start!
19-03-2004 15:45:50 - Session start bgoln4j0wkfcqx4543mgxo45
22-03-2004 10:15:58 - Application start!
22-03-2004 10:16:21 - Application start!
22-03-2004 10:16:22 - Session start nbzez355wdglucf0alvherjb
22-03-2004 10:20:56 - Session start ct4logbxccyezw45wcr5jois

Ingen "Session End" :o(

"Marten Ølgaard" <tr...@comonto.dk> skrev i en meddelelse
news:405b1963$0$274$edfa...@dread12.news.tele.dk...

Kim Bach Petersen

unread,
Mar 22, 2004, 9:36:14 AM3/22/04
to
Klaus Petersen wrote:

> protected void Session_End(Object sender, EventArgs e)
> {
> log ("Session End");
> }
>

> Ingen "Session End" :o(

Eller rettere: Session_End bliver ikke logget...

Da jeg i sin tid skulle lave en onlineliste (http://dotnet.kensho.dk?id=45)
eksperimenterede jeg mig frem til, at man ikke kan skrive til filer fra
Session_End-eventen, men har endnu til gode at finde forklaringen.

Jeg er med andre ord ret sikker på, at eventen faktisk falder, blot kan man
altså ikke logge det på denne måde.

Klaus Petersen

unread,
Mar 22, 2004, 10:15:12 AM3/22/04
to
> Jeg er med andre ord ret sikker på, at eventen faktisk falder, blot kan
man
> altså ikke logge det på denne måde.

Har du et forslag til hvordan kan jeg ellers afgøre om eventen falder?


Kim Bach Petersen

unread,
Mar 22, 2004, 11:22:11 AM3/22/04
to
Klaus Petersen wrote:

Du kan lave en simpel tæller, som tæller én op ved Session_Start og ned ved
Session_End, eller en ArrayList med SessionId'er, hvor du henholdsvis
tilføjer og fjerner. Ved at gemme data i en applikationsvariabel kan du
tjekke det via en side.

Rasmus Rummel

unread,
Mar 22, 2004, 1:33:58 PM3/22/04
to
"Klaus Petersen" <spec...@getTOnet.dk> wrote in message
news:rlD7c.161$nn....@news.get2net.dk...

Session_End falder ved Session.Abandon(), det kan du teste i debuggeren (i
al fald hvis du har VS IDE). Uden at vide det, vil jeg tro problemet er din
log funktion, som refererer MapPath på Server objektet, men der er
formentlig ikke information om din request i Session_End og så kan MapPath
selvfølgelig ikke mappe noget og så kan du ikke logge fra Session_End (med
den aktuelle log funktion). Hvis det er rigtigt, så kan du måske mappe den
fysiske sti på et tidligere tidspunkt og gemme den i en variabel tilgængelig
fra din log funktion.

Med venlig hilsen
Rasmus Rummel.


Klaus Petersen

unread,
Mar 22, 2004, 3:03:48 PM3/22/04
to
> Uden at vide det, vil jeg tro problemet er din
> log funktion, som refererer MapPath på Server objektet, men der er
> formentlig ikke information om din request i Session_End og så kan MapPath
> selvfølgelig ikke mappe noget og så kan du ikke logge fra Session_End (med
> den aktuelle log funktion). Hvis det er rigtigt, så kan du måske mappe den
> fysiske sti på et tidligere tidspunkt og gemme den i en variabel
tilgængelig
> fra din log funktion.

Jammen Rasmus ... det har du da fuldstændig ret i! :o)

Jeg lavede det om til at den mappede stien til min log fil på application
start og gemte den i en applikationsvariabel.

Så ændrede jeg at log funktionen brugte applikationsvariablen i stedet for.

Det gjorde at min log fil indholdte "Session End" som indikation for at
session end eventen faldt.

Tak for jeres svar!


0 new messages