Problème de session


#1

Bonjour,

J’essaye d’appliquer les sessions dans un projet Rails.

Voici mon premier “conttroler”

Code :

class Personne
attr_accessor :nom, :prenom, :telephone
end

class AdminController < ApplicationController
def index
end

def action1
p = Personne.new
p.nom = params[:nom]
p.prenom = params[:prenom]
p.telephone = params[:telephone]

session["personne"] = p

chaine = "<a href ='http://localhost:3000/test/index'>#{p.nom}</a>"
render :text=>chaine

end

def action2
p = session[‘personne’]

if p.nil?
  chaine = "La sesion est inconue"
else
  chaine = "Nom : #{p.nom} <br /> Pr&eacute;nom :

#{session[‘personne’].prenom}
Téléphone :
#{p.telephone}"
end
render :text=>chaine
end
end

puis j’essaye de récupérer la session dans un autre “controller”

Code :

class TestController < ApplicationController

def index
p = session[‘personne’]

if p.nil?
  chaine = "La sesion est inconue"
else
  chaine = "Nom : #{p.nom} <br /> Pr&eacute;nom : #{p.prenom} <br/>

Téléphone : #{p.telephone}"
end
render :text=>chaine
end
end

Ici il m’indique que :

We’re sorry, but something went wrong.

We’ve been notified about this issue and we’ll take a look at it
shortly.

On ma signalé de rajouter : model personne dans mon “controller” Test,

Mais cela ne fonctionne pas mieux.

Ai-je fais une erreur?
Faut-il ajouter quelque chose à Rails pour les sessions.

Merci de votre aide.

MaitrePylos


#2

Je ne sais pas pourquoi ça ne marche pas. Mais essai avec le symbole
:personne

Soit session[:personne] ça devrait marcher.

Je crois que si tu défini un symbole, tu peux le retrouver un peu
partout dans ton environement. Les cas dans lesquels les utiliser ne
sont pas encore très clair pour moi donc prends ce que je te dis avec
précaution.

Néanmoins, je n’ai pas de problèmes de ce genre avec les sessions en
utilisant les symboles.

Par contre j’aurais une petite question par rapport à leur utilisation.
Je voulais savoir si, quelqun de balèse et mal intentionné pourait
programmer un browser perso dans lequel il pourait deffinir lui même les
sessions.

Un petit exemple, mettons qu’on ai une clef :logged dans notre session.
Ainsi à “l’entrée” de chaque page on testerais simplement si il faut
l’afficher ou non. Ainsi, le mec balèse mal intentioné pourait-il
envoyer une requète frauduleuse dans laquelle session[:logged]=true ?

Spontanement je dirais que oui. Alors je me demandais quel était le
schema classique et basique du tableau session pour assurer un premier
niveau de sécurité des pages visitées. Est-il conseillé par exemple
d’aller systematiquement voir dans la base de donnée vérifier que
nickname et password correspondent ?

Merci bien


#3

Mun wrote:

Je ne sais pas pourquoi ça ne marche pas. Mais essai avec le symbole
:personne

Soit session[:personne] ça devrait marcher.

si je reste dans le même controller cela ne pose pas de problème.

par contre dès que je sors et vais dans un autre controller j’ai une
erreur qui donne ceci dans les logs

logs:

Processing AdminController#action1 (for 127.0.0.1 at 2007-03-09
11:31:10) [POST]
Session ID: 64d9a9e2bb57ed66aeb412ee336eddd8
Parameters: {“nom”=>“ernaelsten”, “prenom”=>“gérard”,
“action”=>“action1”, “controller”=>“admin”, “telephone”=>“071300085”}
Completed in 0.00092 (1090 reqs/sec) | Rendering: 0.00005 (5%) | 200 OK
[http://localhost/admin/action1]
Session contains objects whose class definition isn’t available.
Remember to require the classes for all objects kept in the session.
(Original exception: uninitialized constant Module::Personne
[NameError])

J’ai tenté de rajouter ceci dans mon controller

Module :Personne ou Module::Personne

Mais cela ne fonctionne pas mieux.

Merci de votre aide

MaitrePylos


#4
  1. Vérifie que tu utilises la dernière version de Rails (1.2.x)
  2. Met ta classe personne dans un fichier personne.rb dans le dossiers
    des modèles.
  3. Ta classe personne devrait avoir une meilleure visibilité.
  4. Ça devrait mieux marcher maintenant :).

Pylos Maitrepylos wrote:

J’ai tenté de rajouter ceci dans mon controller

Module :Personne ou Module::Personne

Mais cela ne fonctionne pas mieux.

Merci de votre aide

MaitrePylos


#5

Nicolas B. wrote:

  1. Vérifie que tu utilises la dernière version de Rails (1.2.x)
  2. Met ta classe personne dans un fichier personne.rb dans le dossiers
    des modèles.
  3. Ta classe personne devrait avoir une meilleure visibilité.
  4. Ça devrait mieux marcher maintenant :).

Nickel.

Un grand merci