Question

En rubis sur rails en faisant session[:foo] = nil il laisse une entrée nommée :foo dans l'objet session.Comment pouvez-vous vous débarrasser de cette entrée unique de l’objet session ?

Était-ce utile?

La solution

En fait, il existe un moyen de supprimer une valeur de la session.Comme RichH l'a dit, la variable de session est une instance CGI :: Session.Quand entrez quelque chose comme session[:foo] il s'agit en fait de rechercher ce symbole dans un @data variable d'instance dans l'objet de session.Cette variable de données est un hachage.

MODIFIER: Il existe une variable d'instance de données dans la classe CGI::Session.Si vous allez au documents et regardez le code source du []= méthode, vous verrez qu'il y a un @data membre.

Donc à supprimer session[:foo] tout ce que vous avez à faire c'est d'y accéder @data variable depuis l'intérieur de la session

   session.data[:foo]

Maintenant pour le supprimer :

   session.data.delete :foo

Une fois que vous faites cela, il ne devrait plus y avoir de foo dans votre variable de session.

Autres conseils

On dirait que la version la plus simple fonctionne.Tous les magasins (Cookie, File, ActiveRecord, ...) utilisent AbstractStore::SessionHash comme l'objet qui contient les données, les différents magasins fournissent uniquement les moyens de charger et de sauvegarder les données. AbstractStore::SessionHash instances.

AbstractStore::SessionHash hérite de Hash, donc cela s'en remet au Hash#delete méthode:

session.delete(:key_to_delete)

Comme la Session est un Ruby CGI : Session et non un hachage, appeler delete supprimera en fait la session.La suppression ne prend aucun paramètre - c'est mon message, vous recevez le message "mauvais nombre d'arguments (1 ou 0)" lorsque vous essayez ce que suggère hyuan.

La manière généralement acceptée d'effacer une entrée de session consiste à utiliser session[:foo] = nil comme vous le suggérez.C'est loin d'être idéal, mais des déclarations comme session[:foo].nil?se comportera comme prévu.

J'aimerais vraiment qu'il se comporte comme un hachage normal...mais ce n'est pas le cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top