Click here to Skip to main content
11,711,750 members (60,971 online)
Click here to Skip to main content

Make session last forever

, 23 Oct 2006 CPOL 121.3K 72
Rate this:
Please Sign up or sign in to vote.
This article will show how to make the session last longer than 20 minutes of inactivity.

Introduction

You do not always have the luxury to bump up the session expiration period from 20 minutes on a server (most likely you are on a shared hosting). Plus it's a bad idea to unnecessarily consume the resources on a server. I have a simple solution that will take care of this problem.

Solution

The solution is simple. Let's create an ASPX page that will return a 1x1 transparent GIF image, and using JavaScript, refresh it every 15 minutes. Thus, the browser will renew the session every 15 minutes if the user is simply reading long text on a page or has walked away to get a cup of coffee. But if the browser is closed (or the user navigates away from our site), the session will expire after 20 minutes of inactivity. And we no longer consume the resources on the server.

Implementation

The implementation is rather simple, especially in the .NET environment.

  1. Create a renewSes.aspx page
  2. In the code-behind, add the following lines:
  3. public class renewSes : System.Web.UI.Page
    {
        static byte [] gif = {0x47,0x49,0x46,0x38,0x39,0x61,0x01,0x00,0x01,
                              0x00,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0xf9,
                              0x04,0x09,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,
                              0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x08,0x04,
                              0x00,0x01,0x04,0x04,0x00,0x3b,0x00};
    
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
        
        private void InitializeComponent()
        {    
            Response.AddHeader("ContentType", "image/gif");
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.BinaryWrite(gif);
            Response.End();
        }
    }

    This code will simply output a small 1x1 transparent GIF, which is in the array "gif", so we do not need to hit the file system for that. Plus, Cacheability is set to NoCache as we do not want the browser to hit the cache, but we want it to renew our session.

  4. Create a user control that has the following HTML:
  5. <script language="Javascript">
    window.setInterval("renewSession();", 600000);
    function renewSession()
    {document.images("renewSession").src = "/renewSes.aspx?par=" + Math.random();}
    </script>

    The code simply hits /renewSes.aspx every 10 minutes, thus keeping your session alive. Plus, Math.random was added to avoid caching in the browser.

  6. Dump it on every page somewhere. Or if you are using templates, then simply add it to your master page.
  7. Done!!! You might want to move the JavaScript code to RegisterClientScriptBlock, but it's not necessary.

Conclusion

Obviously, this method will only work if JavaScript is on, but it's a majority, plus do not forget that it's only for rare cases when the user leaves your page open and walks away expecting you will keep him logged in forever. The server resources are minimal since sessions will continue to expire every 20 minutes when the user navigates away, and the only excessive traffic is the 48 bytes every ten minutes to keep the session alive.

Sample

If you want to see how it works, feel free to visit my E-Commerce Body jewelry site. Add something to the shopping cart and wait for 20 minutes or for a couple days. When you will be back, the cart is still going to be there.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Gevorg
Web Developer
United States United States
I am a Senior Software developer who does a consulting work for several companies. Mostly it's an E-Commerce project.

I do have my own venture. Small online store my wife runs. Body Jewelry. Also visit Piercing info Cool thing is that nor I nor my wife has any piercings. My new website is Belly ring

You may also be interested in...

Comments and Discussions

 
GeneralMy vote of 1 Pin
Jason Ti20-Dec-10 22:40
memberJason Ti20-Dec-10 22:40 
GeneralRainbow jewels Pin
imaginaryplaymate20-Dec-08 22:38
memberimaginaryplaymate20-Dec-08 22:38 
Questionthe same with asp? Pin
ran920-Nov-07 0:26
memberran920-Nov-07 0:26 
GeneralDreamers! Pin
beep1-Nov-07 5:40
memberbeep1-Nov-07 5:40 
QuestionWhy using a random number? Pin
Adam Tibi30-Nov-06 23:13
memberAdam Tibi30-Nov-06 23:13 
Generalnot fully argee Pin
Effun Din30-Oct-06 21:36
memberEffun Din30-Oct-06 21:36 
GeneralRe: not fully argee Pin
Adam Tibi31-Oct-06 3:49
memberAdam Tibi31-Oct-06 3:49 
GeneralRe: not fully argee Pin
Effun Din31-Oct-06 4:17
memberEffun Din31-Oct-06 4:17 
GeneralAnother improvement Pin
DejaVudew10-Oct-06 3:07
memberDejaVudew10-Oct-06 3:07 
GeneralRe: Another improvement Pin
Gevorg10-Oct-06 8:41
memberGevorg10-Oct-06 8:41 
AnswerRe: Another improvement Pin
DejaVudew10-Oct-06 12:01
memberDejaVudew10-Oct-06 12:01 
GeneralRe: Another improvement Pin
Gevorg12-Oct-06 8:14
memberGevorg12-Oct-06 8:14 
GeneralAnother aproche Pin
Zorbek9-Oct-06 13:22
memberZorbek9-Oct-06 13:22 
GeneralProfile? [asp.net 2.0] Pin
BigBenDk21-Aug-06 11:48
memberBigBenDk21-Aug-06 11:48 
GeneralRe: Profile? [asp.net 2.0] Pin
Gevorg22-Aug-06 2:34
memberGevorg22-Aug-06 2:34 
GeneralRe: Profile? [asp.net 2.0] Pin
Mivano7-Oct-06 4:06
memberMivano7-Oct-06 4:06 
GeneralSlight modification Pin
Symo S21-Aug-06 6:11
memberSymo S21-Aug-06 6:11 
GeneralRe: Slight modification Pin
Trevahaha28-Nov-07 15:25
memberTrevahaha28-Nov-07 15:25 
GeneralRe: Slight modification Pin
jonnoshaw3-Apr-09 16:06
memberjonnoshaw3-Apr-09 16:06 
GeneralAmazing Work !! Pin
bobtxt8-Aug-06 22:23
memberbobtxt8-Aug-06 22:23 
GeneralIts a good idea but here's a slight improvement Pin
Robert Ensor30-Jul-06 17:21
memberRobert Ensor30-Jul-06 17:21 
GeneralRe: Its a good idea but here's a slight improvement Pin
Gevorg31-Jul-06 4:38
memberGevorg31-Jul-06 4:38 
AnswerRe: Its a good idea but here's a slight improvement Pin
Adam Tibi1-Aug-06 2:19
memberAdam Tibi1-Aug-06 2:19 
GeneralRe: Its a good idea but here's a slight improvement Pin
Gevorg1-Aug-06 11:09
memberGevorg1-Aug-06 11:09 
GeneralRe: Its a good idea but here's a slight improvement [modified] Pin
Robert Ensor1-Aug-06 11:53
memberRobert Ensor1-Aug-06 11:53 
AnswerRe: Its a good idea but here's a slight improvement Pin
Adam Tibi1-Aug-06 21:38
memberAdam Tibi1-Aug-06 21:38 
QuestionWhat about db? Pin
ian.coetzer28-Jul-06 5:19
memberian.coetzer28-Jul-06 5:19 
AnswerRe: What about db? Pin
Gevorg28-Jul-06 7:06
memberGevorg28-Jul-06 7:06 
GeneralRe: What about db? Pin
ptmcomp1-Sep-06 9:46
memberptmcomp1-Sep-06 9:46 
AnswerRe: What about db? Pin
JM_G23-Oct-06 21:49
memberJM_G23-Oct-06 21:49 
GeneralMy Girlfriends Pin
Varindir Rajesh Mahdihar27-Jul-06 10:36
memberVarindir Rajesh Mahdihar27-Jul-06 10:36 
GeneralRe: My Girlfriends Pin
Gevorg28-Jul-06 4:55
memberGevorg28-Jul-06 4:55 
QuestionErr? Pin
Mark Cassidy18-Jul-06 22:11
memberMark Cassidy18-Jul-06 22:11 
AnswerRe: Err? Pin
Gevorg20-Jul-06 11:16
memberGevorg20-Jul-06 11:16 
GeneralRe: Err? Pin
Mark Cassidy20-Jul-06 21:20
memberMark Cassidy20-Jul-06 21:20 
GeneralSuggestion Pin
Richard Deeming14-Jul-06 7:23
memberRichard Deeming14-Jul-06 7:23 
GeneralRe: Suggestion Pin
Gevorg14-Jul-06 7:39
memberGevorg14-Jul-06 7:39 
GeneralRe: Suggestion Pin
sayedwasim14-Aug-06 20:26
membersayedwasim14-Aug-06 20:26 
GeneralRe: Suggestion Pin
Richard Deeming15-Aug-06 0:24
memberRichard Deeming15-Aug-06 0:24 
GeneralSo Simple Pin
Boro_Bob13-Jul-06 23:09
memberBoro_Bob13-Jul-06 23:09 
GeneralScalability Pin
Mark Focas13-Jul-06 19:48
memberMark Focas13-Jul-06 19:48 
GeneralRe: Scalability Pin
Gevorg14-Jul-06 7:28
memberGevorg14-Jul-06 7:28 
GeneralRe: Scalability Pin
Brian.Brown27-Jul-06 10:40
memberBrian.Brown27-Jul-06 10:40 
AnswerRe: Scalability Pin
C# Genius29-Jul-06 9:27
memberC# Genius29-Jul-06 9:27 
GeneralRe: Scalability Pin
Gevorg1-Aug-06 10:57
memberGevorg1-Aug-06 10:57 
GeneralRe: Scalability Pin
C# Genius1-Aug-06 16:52
memberC# Genius1-Aug-06 16:52 
GeneralRe: Scalability Pin
Gevorg3-Aug-06 6:44
memberGevorg3-Aug-06 6:44 
GeneralRe: Scalability Pin
Brian.Brown21-Aug-06 9:06
memberBrian.Brown21-Aug-06 9:06 
GeneralRe: Scalability Pin
Brian.Brown21-Aug-06 8:56
memberBrian.Brown21-Aug-06 8:56 
GeneralMeta refresh Pin
mischa_k30-Apr-06 22:12
membermischa_k30-Apr-06 22:12 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.150819.1 | Last Updated 23 Oct 2006
Article Copyright 2006 by Gevorg
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid