IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Sessions, Rails 1.2 vs 2.0


Sujet :

Ruby on Rails

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Sessions, Rails 1.2 vs 2.0
    Hello,

    Je suis en train de lire la documentation sur rails 2.1 et j'ai vu que la gestion des sessions était différente entre rails 1.2.* et 2.*

    1.2.*

    Session en base ou dans un fichier sur le serveur, le cookie client contient une clé pour ré-obtenir les valeures

    2.*

    Session cookie, rien stocké côté serveur.

    Ma grande question : Pourquoi je stockerai pas tout dans la base comme avant ? Pourquoi préférer les cookies ? Dans presque tous les cas, j'aurai besoin de récupérer des données en base (nom de l'utilisateur, panier (si c'est un shop)), etc.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Rails 2.0 rajoute effectivement cette fonctionnalité, mais tu peux aussi utiliser une base de données ou des fichiers. Il suffit de changer le session store (quelque part dans environment.rb).


    Ma grande question : Pourquoi je stockerai pas tout dans la base comme avant ? Pourquoi préférer les cookies ?
    Voici ce qu'a dit DHH lors du lancement de Rails 2.0 :
    The default session store in Rails 2.0 is now a cookie-based one. That means sessions are no longer stored on the file system or in the database, but kept by the client in a hashed form that can’t be forged. This makes it not only a lot faster than traditional session stores, but also makes it zero maintenance. There’s no cron job needed to clear out the sessions and your server won’t crash because you forgot and suddenly had 500K files in tmp/session.

    This setup works great if you follow best practices and keep session usage to a minimum, such as the common case of just storing a user_id and a the flash. If, however, you are planning on storing the nuclear launch codes in the session, the default cookie store is a bad deal. While they can’t be forged (so is_admin = true is fine), their content can be seen. If that’s a problem for your application, you can always just switch back to one of the traditional session stores (but first investigate that requirement as a code smell).

    Dans presque tous les cas, j'aurai besoin de récupérer des données en base (nom de l'utilisateur, panier (si c'est un shop))
    Donc dans le meilleur des cas, tu n'as même pas besoin de taper dans la base de données et dans le pire des cas, tu économises une requête (pour récuperer les données de session). Ça me semble toujours bon à prendre.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Points : 124
    Points
    124
    Par défaut
    Il faut faire attention à ce que tu mets en session car la taille maximum d'un cookie = 4 ko.
    Cela force un peu à mettre les ids en session plutôt que les objets.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Mookie Voir le message
    Il faut faire attention à ce que tu mets en session car la taille maximum d'un cookie = 4 ko.
    Cela force un peu à mettre les ids en session plutôt que les objets.
    oui justement, donc tu dois refaire la requête en base pour obtenir l'objet. C'est pour ça que j'ai un peu de la peine à comprendre le réél but

    De plus, garder des objets en sessions oblige à chaque fois de unmarshaller l'info même quand tu n'as pas besoin de l'objet.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Et pourquoi garder le message flash dans la session ?

  6. #6
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 865
    Points
    1 865
    Par défaut
    Il y a donc moyen d'utiliser des sessions ou les données sont stocké dans la base de donnée ou le systeme de fichier du serveur plutot que dans un cookie si il y a des données sensibles ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par kedare Voir le message
    Il y a donc moyen d'utiliser des sessions ou les données sont stocké dans la base de donnée ou le systeme de fichier du serveur plutot que dans un cookie si il y a des données sensibles ?
    bien entendu, en général, les sessions c'est côté serveur.

  8. #8
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 865
    Points
    1 865
    Par défaut
    Vous savez comment on peut faire pour que la session expire aprés un certain temps ?
    j'ai cru lire qu'il fallais mettre :session_expires dans la session avec la date de l'expiration, mais ca date de 2006 donc je suis pas sure que ca soit toujours comme ca...

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910

  10. #10
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 865
    Points
    1 865
    Par défaut
    j'ai rien trouvé sur l'expiration dans le premier, et dans le deuxieme il est utilisé differement, je parlais de l'utiliser comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session[:session_expires] = Time...

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Citation Envoyé par kedare Voir le message
    il est utilisé differement, je parlais de l'utiliser comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session[:session_expires] = Time...
    Ce qui serait censé faire quoi ?

    Dans mon idée une session expire après une certaine période d'inactivité. Tu veux simplement dire "cette session n'est plus valide dans 10 minutes" quelque soit ce que l'utilisateur fait entre temps ?

  12. #12
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 865
    Points
    1 865
    Par défaut
    Citation Envoyé par Taum Voir le message
    Ce qui serait censé faire quoi ?

    Dans mon idée une session expire après une certaine période d'inactivité. Tu veux simplement dire "cette session n'est plus valide dans 10 minutes" quelque soit ce que l'utilisateur fait entre temps ?
    non, que la session soit detruite 10min aprés la derniere action de l'utilisateur

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Dans ce cas ça parait cohérent d'avoir une méthode de classe sur ActionController::Base comme indique la documentation que je t'ai mis en lien.

    Je pense qu'il faut définir une durée de session dans le ApplicationController :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class ApplicationController
      session :session_expires => ...
    end
    En revanche d'après la doc je n'arrives pas à savoir exactement ce qu'on doit mettre en paramètre. Je pense que quelque chose comme Proc.new { Time.now + 10.minutes } pourrait marcher mais je n'ai rien sous la main pour tester

Discussions similaires

  1. Le mécanisme de sessions Rails
    Par Bovino dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 19/12/2012, 13h50
  2. Le mécanisme de sessions Rails
    Par Bovino dans le forum Ruby
    Réponses: 0
    Dernier message: 19/12/2012, 13h50
  3. Sessions avec Ruby on Rails
    Par gsaly dans le forum Ruby
    Réponses: 8
    Dernier message: 25/09/2009, 23h37
  4. rails et Les sessions
    Par MaitrePylos dans le forum Ruby on Rails
    Réponses: 8
    Dernier message: 12/03/2007, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo