Surendra Sharma

Surendra Sharma

Search This Blog

Thursday, May 13, 2010

Redirecting User to Login Page After Session Timeouts


Refreshing any page after certain interval

     For
refreshing any page after certain interval, you need to use client side script
only. You cant do this in server side, The reason being that the page has been
served to the client, end of request.  The web is stateless; until the user
comes back and initiates another request the server can't do anything. So we
need to do this refreshing activity from client side only. There are two ways to
achieve this,

                   
1. Using Window.setTimeout method

                   
2. Using Meta Tag - Refresh. 

Using
Window.setTimeout method:

              DHTML Window object has a
method called "setTimeout" which  evaluates an expression after a specified
number of milliseconds has elapsed. With the help of this method, you can run
the client side script window.location.href="somepage" to redirect page in the
current window. SetTimeout accepts three parameters.


vCode


Required. Variant that
specifies the function pointer or string that indicates the code to be executed
when the specified interval has elapsed.


iMilliSeconds


Required. Integer that
specifies the number of milliseconds.


sLanguage


Optional. String that
specifies one of the following values:




JScript


Language is JScript.



VBScript


Language is VBScript.



JavaScript


Language is JavaScript.


             You need to call
this method in body load and start the timer( by calling setTimeout method).
This timer will elapse depending upon the second parameter for this method. When
it is elapsed, it will fire the script which is given as first parameter. So you
need to add this to the body element onload method. For adding client side event
to body tag in asp.net you need to follow this methos.

1. Declare the body tag in
html window as server control by specifing runat attribute and give an id to
that tag.

                               
<body runat="server" id= "body">< /P>< /FONT>

2. In the code behind,
declare this element as htmlgenericcontrol like this.            

  Protected WithEvents body As
System.Web.UI.HtmlControls.HtmlGenericControl
    

3. Finally add
the following code in your page_load event handler, this will add the client
side handler for body tag.

 body.Attributes.Add("onLoad",
"window.setTimeout(""window.location.href='<somepage>.aspx'"",5000);")
     

This method will
refresh the page to the specified location after 5 secs. The disadvantage of
this method is, this might not work in some lower end browsers. So you need to
go for other method i.e. by using Meta Tags.

Using
Meta Tag - Refresh

   

Another way for refreshing the page after certain interval is by using meta tag
- Refresh. This tag specifies a delay in seconds before the browser
automatically reloads the document. Optionally, specifies an alternative URL to
load. Example

              
<META HTTP-EQUIV="Refresh"
CONTENT="3;URL=http://www.some.org/some.html">

In ASP.NET, you
can add headers in code behind using this method.

            
Response.AppendHeader("Refresh", "10;
URL=.aspx")

This method will
reload the current window after interval mentioned in the second parameter to
the page which is mentioned as URL to refresh. In this case page will be
refreshed after 10 seconds.

Redirecting User To Login Page after Session Timeouts.

Redirecting user
to login page after session timeout is similar to refreshing the page after
certain intervals method. Only thing which will differ is that calculating time
after which the page has to be redirected. Hence time can be calculated using
Session.timeout property which will give us session timeout value for that
session. Add some grace timings to that value and redirect the user to the login
page automatically.

Using
Window.setTimeout method


body.Attributes.Add("onLoad",
"window.setTimeout(""window.location.href='login.aspx'""," & (Session.Timeout *
60 * 1000) + 10000 & ");")

Using
Meta Tag - Refresh


Response.AppendHeader("Refresh", Convert.ToString((Session.Timeout * 60) + 10) &
"; URL=Login.aspx")

Both these methods will redirect the
user to login page  after session timeout + 10 seconds. This is how you can
redirect the user to login page after session timeout without user interaction.

No comments:

Post a Comment