Supprimer variables et variables de session


#1

Bonjour,

Comment supprimer une variable de session?

Merci de votre aide.

MaitrePylos


#2

Comment supprimer une variable de session?

il me semble que en fait on lui assigne la valeur nil :

session[:variable] = nil

gUI


#3

Guillaume B. wrote:

Comment supprimer une variable de session?

il me semble que en fait on lui assigne la valeur nil :

session[:variable] = nil

gUI

Ok, c’est comme ça que j’essaye dans mon projet, mais à un moment je
dois vérifier si cette variable existe ou non.

je voudrais savoir si le fait de lui assigner “Nil” detruit la variable,
ou comme elle est initialiser à “False”, elle existe toujours?

merci de votre aide.


#4

Etant donné qu’avec Ruby tu n’as pas de création de variable comme tu
pourrais en avoir en Pascal par exemple, toutes tes variables
existent.

En la mettant à “nil”, tu spécifies qu’elle n’est pas définie.

Pour savoir si ta variable est définie ou pas, utilise la méthode
“defined?”, qui te renverra vrai si elle ne contient pas “nil”.


Guillaume DESRAT / Zifro AKA guillaumed
Secrétaire de l’association Ruby France
http://www.rubyfrance.org/


#5

Merci :slight_smile:


#6

Je fais des tests.

Merci de votre aide.

MaitrePylos


#7

Oui, la solution d’Alexis est non seulement plus élégante, mais bien
plus propre.


Guillaume DESRAT / Zifro AKA guillaumed
Secrétaire de l’association Ruby France
http://www.rubyfrance.org/


#8

Attention, session est tout sauf une instance de Hash

app.get “/”
=> 200

app.controller.session.class
=> CGI::Session

Donc toutes les méthodes indiquées par Alexis vont échouer:

app.controller.session.size
NoMethodError: undefined method `size’ for #CGI::Session:0xb714f638
from (irb):23
from :0

La seule méthode reconnue est d’affecter l’entrée à nil. Extrait de
http://api.rubyonrails.com/classes/ActionController/Base.html
“For removing objects from the session, you can either assign a single
key to nil, like session[:person] = nil, or you can remove the entire
session with reset_session
http://api.rubyonrails.com/classes/ActionController/Base.html#M000274.”

Simon


#9

Comme il m’avait embobiné Alexis !

Merci pour nous avoir rappelé à l’ordre, Alexis et moi, avec nos
“conseils”.


Guillaume DESRAT / Zifro AKA guillaumed
Secrétaire de l’association Ruby France
http://www.rubyfrance.org/


#10

Je n’ai pas vérifié, cependant je ne dois pas prendre bcp de risque à
dire que session est basé sur Hash. Donc il suffit de jeter un coups
d’oeil sur la doc.

Mettre à nil ne supprimera pas l’entrée. Je te conseille d’utiliser
delete sinon ça risque de générer des séances de debug assez intenses.
En effet si plus tard tu teste la présence d’une valeur à partir de la
méthode has_key? voici ce que tu va rencontrer comme problème.

irb(main):001:0> session = {:a => 1, :b => 1}
=> {:a=>1, :b=>1}
irb(main):002:0> session.size
=> 2
irb(main):003:0> session[:a] = nil
=> nil
irb(main):004:0> session.size
=> 2
irb(main):005:0> session.has_key?(:a)
=> true
irb(main):006:0> session.delete(:a)
=> nil
irb(main):007:0> session.size
=> 1
irb(main):008:0> session.has_key?(:a)
=> false

À +

Le 30/03/07, Guillaume Zifro DESRATremoved_email_address@domain.invalid a écrit :


#11

C’est pas de chance ça, moi qui pensais que j’avais pas besoin de
vérifier le type, et bien c’est loupé :slight_smile:

Le 30/03/07, Guillaume Zifro DESRATremoved_email_address@domain.invalid a écrit :