# Session

**URL:** <https://www.ruby-forum.com/t/session/69652>\
**Category:** IT\
**Created:** [September 22, 2006, 6:22pm UTC](https://www.ruby-forum.com/t/session/69652 "2006-09-22T18:22:39Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [September 22, 2006, 6:22pm UTC](https://www.ruby-forum.com/t/session/69652/1 "2006-09-22T18:22:39Z")

</div>

Per andare avanti con l’applicazione , posticipando la risoluzione del  
problema, avevo definito una variabile globale che prendeva come valore  
il nome dell’utente loggato.  
(Sbaglio a pensare che la variabile globale definita in Application  
verrÃ sovrascritta dal prossimo utente che si connetterÃ ?)  
Certo che questo modo di fare mi creerÃ problemi ho deciso (ma non so se  
Ã¨ giusto) di fare in quest’altro modo:

In login\_controller ho:  
def login  
if request.get?  
session[:user\_id] = nil  
session[:user\_name] = nil #\*\*sostituisce var globale usata in  
precedenza  
@user = User.new  
else  
@user = User.new(params[:user])  
logged\_in\_user = @user.try\_to\_login

```
  if logged_in_user
    session[:user_id] = logged_in_user.id
    session[:user_name] = logged_in_user.name

puts session[:user_id] # ok valore esatto
puts session[:user_name] # ok valore esatto

    @user = User.find(:first,:conditions => "name = 

```

‘#{@user.name}’")  
redirect\_to(:action =\> “index”)  
else  
flash[:notice] = “Combinazione user/password non valida”  
end  
end  
end

Dopo il login dovrei filtrare tutti i record marcati col nome o con l’id  
dell’utente loggato.  
Nelle righe di codice a cui si fa riferimento a session[:user\_name]  
ricevo l’errore  
undefined local variable or method `session’ for Nomeclasse:Class  
Credevo che l’oggetto sessione fosse visibile a tutti.

Cosa devo sapere per risolvere il problema?  
Quale Ã¨ il modo ottimale per gestire questa esigenza?

In attesa … ringrazio in anticipo.  
BM

---

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [September 23, 2006, 3:25pm UTC](https://www.ruby-forum.com/t/session/69652/2 "2006-09-23T15:25:46Z")

</div>

A quanto vedo session[:user\_name]  
Ã¨ vista nei vari controller, difatti la linea di seguito riportata  
definita in controller Admin funziona

@requirement\_pages, @requirements = paginate :requirements, :conditions  
=\> “status = 1 and amministratore = ‘#{session[:user\_name]}’”, :order\_by  
=\> “data DESC”, :per\_page =\> 12

ma session[:user\_name] non Ã¨ visibile nel modello Requirement dove io  
tentavo di fare

def self.count\_charged  
if session[:user\_name] != ‘sadmin’  
count(“status = 1 and amministratore = ‘#{session[:user\_name]}’”)  
else  
count(“status = 1”)  
end  
end  
ricevendo l’errore:  
undefined local variable or method `session’ for Requirement:Class

che devo fare per rendere visibile in Requirement:Class  
session[:user\_name] ?

sempre ruby-ignoranza?  
in attesa … grazie  
BM

---

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [September 23, 2006, 8:13pm UTC](https://www.ruby-forum.com/t/session/69652/3 "2006-09-23T20:13:05Z")

</div>

Ho risolto modificando questo

> def self.count\_charged  
> if session[:user\_name] != ‘sadmin’  
> count(“status = 1 and amministratore = ‘#{session[:user\_name]}’”)  
> else  
> count(“status = 1”)  
> end  
> end

in questo

def self.count\_charged(amministratore)  
if amministratore != ‘sadmin’  
count(“status = 1 and amministratore = ‘#{amministratore}’”)  
else  
count(“status = 1”)  
end  
end

Si puo’ fare meglio ?
