Reputation: 1125
I am having an issue in my Asp.net app where I am setting the session timeout and after the period of time has passed, the session still hasn't expired. There is a SQL Server 2008 backend database for this app, and in there I am storing the session timeout value for this app. I currently have it set at 3 minutes for testing purposes. In Global.asax, in the Session_Start I have the following:
// Set the timeout
int timeout = GetSessionLength();
this.Session.Timeout = timeout;
And the GetSessionLength()
is a function that returns an integer value after querying the Database for the session timeout.
Then, in the site's master page, on Page_Load, I have the following:
System.Web.UI.HtmlControls.HtmlMeta hmRefresh = new System.Web.UI.HtmlControls.HtmlMeta();
hmRefresh.HttpEquiv = "Refresh";
hmRefresh.Content = (this.Session.Timeout * 60).ToString();
Page.Header.Controls.Add(hmRefresh);
This causes the page to refresh itself once the timeout has been hit. My page is successfully refreshing itself using this. However, I have some other code that gets hit when the session is expired, but that never gets hit because it shows that the session never expired.
Also, I have been developing a different app on my computer and I use the same code in that app to detect session timeouts and it is working perfect for that app. So I am not sure why it isn't for this one.
Upvotes: 0
Views: 3627
Reputation: 100547
My guess you have some other requests in the same session between you meta-refresh. Any request in the same session will slide the expiration. Also you try to do refresh right at the time session expires, so there is good chance that it will randomly expire/not expire at the time of meta-refresh.
To debug use http debugger (like Fiddler) and verify what request are sent.
Note: with SQL session state there is no notification about expiration (unlike with in-memory one), so the only way to know if session state is expired in SQL/State service cases is to see if Session object is empty. Check out Session-State Events if you are using Session_End.
The Session_OnEnd event is supported only when the session state Mode property is set to InProc, which is the default.
Upvotes: 2