1

I'm looking for a client-side JS library to store session variables.

I'd like a library that supports alternative storage medium, e.g. cookies when available with fallback on other techniques. For instance, I found this one (but the last update is in 2009): http://code.google.com/p/sessionstorage/

I'm not interested in security (apart a bit of data isolation among applications), as I'm not going to store sensitive data.

To give an example of use case, I want to display a message "Chrome user? Download the app" for chrome users, and I'd like to maintain a status in session to avoid displaying the message again to the same user. I don't want server-side sessions as I have caching enabled, so I must be able to serve the exact same page to different users.

ecesena
  • 1,155
  • 1
  • 12
  • 19

2 Answers2

2

You can use localStorage if available, and if it's not, then using cookies (or whatever you feel to):

var appToken = createToken();
try {
    if (localStorage.getItem) {
        localStorage.downloadAppAlert = appToken;
    } else {
        setCookie('downloadAppAlert', appToken, 10); // name, a string value, num. of days
    }
} catch(e) {
    console.log(e);
}

Then you can use some function to set your cookies - i.e. this one i just found in w3schools:

function setCookie(c_name,value,exdays)
{
  var exdate=new Date();
  exdate.setDate(exdate.getDate() + exdays);
  var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
  document.cookie=c_name + "=" + c_value;
}

To retrieve a cookie value by it's name - downloadAppAlert in the example - you can use the one on the w3schools link or something like this:

function readCookie(name) {
  var nameEQ = name + '=';
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

Also, to retrieve a previously setted item on the localStorage you simply:

var appToken = localStorage.getItem('downloadAppAlert');

EDIT: Sorry, with the hurries i forgot to mention what createToken() does. It is supposed to be a random alphanumeric generator function. You can find plenty on SO, like:

Random alpha-numeric string in JavaScript?

Generate random string/characters in JavaScript

Generating (pseudo)random alpha-numeric strings

Community
  • 1
  • 1
TMichel
  • 4,336
  • 9
  • 44
  • 67
  • Thanks for the detailed response. I was actually looking more at a library that abstract from me the choice among LS / cookies / something else... – ecesena Jul 30 '13 at 17:53
  • well, hope this helps in case you can't find an already built library for your purposes. Anyway, IMHO adding a library for this particular problem, without the needing of some grade of security, is not necessary. – TMichel Jul 31 '13 at 09:36
1

Use node-client-sessions (https://github.com/mozilla/node-client-sessions) by mozilla.