
Μου Rails-app έχει ένα σημάδι στο κουτί με ένα κουτάκι «να με θυμάσαι». Οι χρήστες που ελέγχει ότι η θέση θα πρέπει να παραμείνετε συνδεδεμένοι, ακόμη και μετά το κλείσιμο του προγράμματος περιήγησης τους. Είμαι παρακολούθηση από το αν οι χρήστες είναι συνδεδεμένοι με την αποθήκευση id τους στη συνεδρία του χρήστη.


Αλλά οι συνεδρίες εφαρμόζονται σε ράγες, όπως cookies περιόδου, η οποία δεν είναι ανθεκτικές. Μπορώ να *κάνω* τις επίμονες:



```
class ApplicationController < ActionController::Base
  before_filter :update_session_expiration_date

  private

  def update_session_expiration_date
    options = ActionController::Base.session_options
    unless options[:session_expires]
      options[:session_expires] = 1.year.from_now
    end
  end
end

```

Αλλά αυτό φαίνεται σαν μια αμυχή, η οποία αποτελεί έκπληξη για μια τέτοια κοινή λειτουργικότητα. Υπάρχει καλύτερος τρόπος;


**Επεξεργασία**


Απάντηση Gareth είναι πολύ καλή, αλλά θα ήθελα ακόμα μια απάντηση από κάποιον εξοικειωμένο με Rails 2 (λόγω του ότι είναι μοναδικό `CookieSessionStore`).

 
Εφαρμογή του «Να με θυμάσαι» σε μια εφαρμογή Rails
==================================================



Έχω περάσει λίγο χρόνο για να σκεφτόμαστε αυτό και ήρθε σε κάποια συμπεράσματα. Ράγες cookies συνεδρίας είναι απαραβίαστο από προεπιλογή, έτσι μπορείτε πραγματικά δεν χρειάζεται να ανησυχείτε για ένα cookie που τροποποιείται για το τέλος του πελάτη.


Εδώ είναι αυτό που έχω κάνει:


* cookie περιόδου λειτουργίας έχει οριστεί να είναι μακράς διάρκειας (6 μήνες ή έτσι)
* Μέσα στο κατάστημα συνόδου
	+ Μια «λήγει την» ημερομηνία που έχει οριστεί για να συνδεθείτε + 24 ώρες
	+ ταυτότητα χρήστη
	+ Επικυρωμένο = true ώστε να μπορώ να επιτρέπει την ανώνυμη sesssions χρήστη (δεν είναι επικίνδυνη λόγω της παραβίασης προστασίας μπισκότο)
* Μπορώ να προσθέσω μια before\_filter στον ελεγκτή εφαρμογής που ελέγχει το «λήγει στις» μέρος της συνεδρίασης.


Όταν ο χρήστης ελέγχει το πλαίσιο «Να με θυμάσαι», απλά ρυθμίστε την συνεδρία [: expireson] ημερομηνία που θα συνδεθείτε + 2 εβδομάδες. Κανείς δεν μπορεί να κλέψει το cookie και μείνετε συνδεδεμένοι πάντα ή μεταμφιέζονται σε έναν άλλο χρήστη, επειδή το cookie ράγες συνεδρία είναι απαραβίαστο.

 

Δεν θα πρέπει σχεδόν σίγουρα να εκτείνεται το cookie περιόδου που θα ζήσει πολύ.


Αν και δεν ασχολούνται ειδικά με ράγες [αυτό το άρθρο](http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice) πηγαίνει σε κάποιο μήκος για να εξηγήσει «να με θυμάσαι» τις βέλτιστες πρακτικές.


Εν ολίγοις όμως θα πρέπει:


* Προσθέστε μια επιπλέον στήλη στον πίνακα χρήστη να δεχτεί μια μεγάλη τυχαία τιμή
* Ορίστε ένα μακρύ έζησε cookie στον πελάτη που συνδυάζει την ταυτότητα του χρήστη και την τυχαία τιμή
* Όταν ξεκινά μια νέα περίοδο λειτουργίας, ελέγξτε για την ύπαρξη του id / μπισκότο αξία και την ταυτότητα του νέου χρήστη αν ταιριάζουν.


Ο συγγραφέας προτείνει, επίσης, ακυρώνοντας την τυχαία τιμή και την επαναφορά του cookie σε κάθε είσοδο. Προσωπικά δεν μου αρέσει ότι τότε δεν μπορείτε να μείνετε συνδεδεμένοι σε μια τοποθεσία σε δύο υπολογιστές. Θα έχουν την τάση να βεβαιωθείτε ότι η λειτουργία κωδικού πρόσβασης αλλαγή μου την επαναφορά και την τυχαία τιμή κλειδώνοντας έτσι τις συνεδρίες σε άλλα μηχανήματα.


Ως τελική παρατήρηση, η συμβουλή που δίνει σε κάνει ορισμένες λειτουργίες (αλλαγή αλλαγή του κωδικού πρόσβασης / e-mail κλπ) δεν είναι διαθέσιμη για την αυτόματη γνησιότητα συνεδρίες είναι καλά αξίζει τον παρακάτω αλλά σπάνια στον πραγματικό κόσμο.

 

Αυτό είναι ένα πολύ καλό write-up από ένα παιδιά την εμπειρία της δημιουργίας των 30 ημερών επίμονη συνεδρίες.


ΠΡΟΣΟΧΗ: blog post είναι από το 2006


<http://grahamglass.blogs.com/main/2006/05/rails_sessionsr.html>

 

Το plugin restful\_authentication έχει μια καλή εφαρμογή του παρόντος: 


<http://agilewebdevelopment.com/plugins/restful_authentication>

 

Σημειώστε ότι δεν θέλετε να επιμένουν συνεδρία τους, μόνο την ταυτότητά τους. Θα δημιουργήσουμε μια νέα συνεδρία για να τους όταν επιστρέψουν στην περιοχή σας. Σε γενικές γραμμές απλά ορίσετε ένα GUID για το χρήστη, γράφουν ότι με μπισκότο τους, στη συνέχεια, χρησιμοποιήστε το για να τους δούμε όταν θα έρθει πίσω. Μην χρησιμοποιείτε το όνομα χρήστη ή το όνομα χρήστη για την συμβολική, όπως θα μπορούσε εύκολα να μαντέψει και να επιτρέψει μάγκας επισκέπτες να επισκιάσουν τους λογαριασμούς άλλων χρηστών.

 

Θα έλεγα ότι είτε ρίξετε μια ματιά στο RESTful\_Authentication plug in, το οποίο έχει εφαρμογή αυτού του γεγονότος, ή απλά να αλλάξετε την εφαρμογή σας για να χρησιμοποιήσετε την ξεκούραστη Authentication\_plugin. Υπάρχει μια καλή εξήγηση για το πώς να χρησιμοποιήσετε αυτό το plug in στο Railscasts:


[railscasts # 67 restful\_authentication](http://railscasts.com/episodes/67-restful-authentication)


Εδώ είναι μια σύνδεση με το ίδιο το plugin


[restful\_authentication](http://rubygems.org/gems/restful_authentication)

 

Αυτό λειτούργησε σαν μια γοητεία για μένα:


<http://squarewheel.wordpress.com/2007/11/03/session-cookie-expiration-time-in-rails/>


Τώρα συνεδρίες CookieStore μου λήγει μετά από δύο εβδομάδες, σύμφωνα με την οποία ο χρήστης θα πρέπει να υποβάλουν εκ νέου τα διαπιστευτήρια σύνδεσής τους, ώστε να είναι διαρκώς συνδεδεμένοι για άλλες δύο εβδομάδες.


Bascially, είναι τόσο απλό όσο:


1. των οποίων το ένα αρχείο στο πωλητής / plugins κατάλογο
2. σύνολο συνεδρία αξία λήξης ελεγκτή εφαρμογή που χρησιμοποιεί μόνο μία γραμμή

 

Θα πάμε για να επινοούν μια λαμπρή λύση ελέγχου ταυτότητας για ράγες.

 