190 votes

Sauvegarder les objets Javascript dans le sessionStorage

SessionStorage et LocalStorage permettent de sauvegarder des paires clé/valeur dans un navigateur web. La valeur doit être une chaîne de caractères, et la sauvegarde des objets js n'est pas triviale.

var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object

De nos jours, vous pouvez éviter cette limitation en sérialisant les objets en JSON, puis en les désérialisant pour récupérer les objets. Mais l'API de stockage passe toujours par le setItem y getItem méthodes.

sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D

Puis-je éviter cette limitation ?

Je veux juste exécuter quelque chose comme ça :

sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'

J'ai essayé le defineGetter y defineSetter pour intercepter les appels mais c'est un travail fastidieux, car je dois définir toutes les propriétés et mon objectif n'est pas de connaître les propriétés futures.

1 votes

J'y ai pensé moi-même. Je suppose que beaucoup de gens y ont pensé. Mais je ne pense pas que les méthodes getter et setter soient un fardeau trop lourd. BTW ; vous pouvez sérialiser et parser avec JavaScript et MS supporte enfin les mêmes objets standards que tout le monde. L'époque où l'on avait besoin de paquets comme JSON et jQuery touche rapidement à sa fin.

1 votes

Je suppose que je ne vois pas la limitation. Il peut sembler exagéré d'utiliser JSON.stringify et JSON.parse si vous n'avez que des objets triviaux, mais si vous avez des objets de données de bonne taille, ces deux méthodes font beaucoup de travail pour vous.

5 votes

"Puis-je éviter cette limitation ?" semble être une question

4voto

Jijo Paulose Points 1543
    var user = {'name':'John'};
    sessionStorage['user'] = JSON.stringify(user);
    console.log(sessionStorage['user']);

4voto

Igor Urisman Points 310

Le stockage de session ne peut pas prendre en charge un objet arbitraire car il peut contenir des littéraux de fonction (fermetures de lecture) qui ne peuvent pas être reconstruits après un rechargement de la page.

4voto

JerryGoyal Points 9110

Vous pouvez créer deux méthodes enveloppantes pour sauvegarder et récupérer des objets dans le stockage de session.

function saveSession(obj) {
  sessionStorage.setItem("myObj", JSON.stringify(obj));
  return true;
}

function getSession() {
  var obj = {};
  if (typeof sessionStorage.myObj !== "undefined") {
    obj = JSON.parse(sessionStorage.myObj);
  }
  return obj;
}

Utilisez-le comme suit : récupérez un objet, modifiez certaines données et sauvegardez-le.

var obj = getSession();

obj.newProperty = "Prod"

saveSession(obj);

3voto

3Dos Points 1346

Vous pouvez également utiliser le bibliothèque de magasin qui l'exécute pour vous avec la possibilité de croiser les navigateurs.

exemple :

// Store current user
store.set('user', { name:'Marcus' })

// Get current user
store.get('user')

// Remove current user
store.remove('user')

// Clear all keys
store.clearAll()

// Loop over all stored values
store.each(function(value, key) {
    console.log(key, '==', value)
})

1voto

Ferran Basora Points 674

J'ai trouvé cette bibliothèque adaptée à mes besoins : http://www.jstorage.info

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X