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




Μου 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`).
Έχω περάσει λίγο χρόνο για να σκεφτόμαστε αυτό και ήρθε σε κάποια συμπεράσματα. Ράγες cookies συνεδρίας είναι απαραβίαστο από προεπιλογή, έτσι μπορείτε πραγματικά δεν χρειάζεται να ανησυχείτε για ένα cookie που τροποποιείται για το τέλος του πελάτη.


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


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


Όταν ο χρήστης ελέγχει το πλαίσιο «Να με θυμάσαι», απλά ρυθμίστε την συνεδρία [: expireson] ημερομηνία που θα συνδεθείτε + 2 εβδομάδες. Κανείς δεν μπορεί να κλέψει το cookie και μείνετε συνδεδεμένοι πάντα ή μεταμφιέζονται σε έναν άλλο χρήστη, επειδή το cookie ράγες συνεδρία είναι απαραβίαστο.
<p>όπως μπορούμε <a href="https://github.com/rails/rails/blob/master/actionpack/lib/abstract\_controller/callbacks.rb">βλέπε</a> στο <code>actioncontroller::base</code>, <code>before\_action</code> είναι μόνο <a href="https://github.com/rails/rails/commit/9d62e04838f01f5589fa50b0baa480d60c815e2c">νέα σύνταξη</a> για <code>before\_filter</code>.</p><p>ωστόσο, όλες οι συνταγές <code>before\_filters</code> <a href="https://github.com/rails/rails/blob/v5.0.0.beta2/actionpack/lib/abstract\_controller/callbacks.rb#l190-l193">έχουν καταργηθεί</a> σε <strong> rails 5.0 </strong> και θα αφαιρεθούν σε <strong> rails 5.1 </strong></p> το πρόβλημα μάλλον είναι ότι δεν κλείνει ουσιαστικά η εφαρμογή. είχα παρόμοιο θέμα πριν αρκετό καιρό(νομίζω κάποια στιγμή είχα απαντήσει εδώ σε ανάλογο θέμα). αυτό που έκανα εγώ και διόρθωσε το πρόβλημα ήταν η τροποποίηση της συντόμευσης για το άνοιγμα της εφαρμογής και η αλλαγή της γραμμής που ανοί… Κάνατε πολύ καλή δουλειά στο να συνοψίσετε τι είναι φοβερό στο Node.js. Η αίσθησή μου είναι ότι το Node.js είναι ιδιαίτερα κατάλληλο για εφαρμογές όπου θα θέλατε να διατηρήσετε μια μόνιμη σύνδεση από το πρόγραμμα περιήγησης πίσω στον διακομιστή. Χρησιμοποιώντας μια τεχνική γνωστή ως ["long-polling"](https://en.wikipedia.org/wiki/Push_technology#Long_polling), μπορείτε να γράψετε μια εφαρμογή που στέλνει ενημερώσεις στον χρήστη σε πραγματικό χρόνο. Η πραγματοποίηση long polling σε πολλούς από τους γίγαντες του διαδικτύου, όπως το [Ruby on Rails](https://en.wikipedia.org/wiki/Ruby_on_Rails) ή το [Django](https://en.wikipedia.org/wiki/Django_%28web_framework%29), θα δημιουργούσε τεράστιο φόρτο στον διακομιστή, επειδή κάθε ενεργός πελάτης τρώει μια διεργασία του διακομιστή. Αυτή η κατάσταση ισοδυναμεί με επίθεση [tarpit](https://en.wikipedia.org/wiki/Tarpit_(networking)). Όταν χρησιμοποιείτε κάτι όπως το Node.js, ο διακομιστής δεν έχει ανάγκη να διατηρεί ξεχωριστά νήματα για κάθε ανοιχτή σύνδεση. 


Αυτό σημαίνει ότι μπορείτε να δημιουργήσετε μια [εφαρμογή συνομιλίας με βάση το πρόγραμμα περιήγησης](https://github.com/rivalslayer/node_chat) σε Node.js που δεν χρειάζεται σχεδόν καθόλου πόρους συστήματος για να εξυπηρετεί πολλούς πελάτες. Κάθε φορά που θέλετε να κάνετε αυτού του είδους τη μακροχρόνια αναζήτηση, το Node.js είναι μια εξαιρετική επιλογή. 


Αξίζει να αναφέρουμε ότι και η Ruby και η Python έχουν εργαλεία για να κάνουν κάτι τέτοιο ([eventmachine](http://rubyeventmachine.com/) και [twisted](https://twistedmatrix.com/trac/), αντίστοιχα), αλλά ότι το Node.js το κάνει εξαιρετικά καλά, και από την αρχή. Η JavaScript είναι εξαιρετικά καλά τοποθετημένη σε ένα μοντέλο ταυτόχρονης λειτουργίας βασισμένο σε callback, και υπερέχει εδώ. Επίσης, η δυνατότητα σειριοποίησης και αποσειριοποίησης με JSON εγγενές τόσο στον πελάτη όσο και στον διακομιστή είναι αρκετά έξυπνη.


Ανυπομονώ να διαβάσω άλλες απαντήσεις εδώ, αυτή είναι μια φανταστική ερώτηση.


Αξίζει να επισημάνουμε ότι το Node.js είναι επίσης εξαιρετικό για καταστάσεις στις οποίες θα επαναχρησιμοποιήσετε πολύ κώδικα σε όλο το χάσμα πελάτη/εξυπηρετητή. Το [Meteor framework](https://meteor.com) το κάνει αυτό πολύ εύκολο, και πολλοί άνθρωποι προτείνουν ότι αυτό μπορεί να είναι το μέλλον της ανάπτυξης ιστοσελίδων. Μπορώ να πω από την εμπειρία μου ότι είναι πολύ διασκεδαστικό να γράφεις κώδικα στο Meteor, και ένα μεγάλο μέρος αυτού είναι να ξοδεύεις λιγότερο χρόνο σκεπτόμενος πώς θα αναδομήσεις τα δεδομένα σου, ώστε ο κώδικας που εκτελείται στο πρόγραμμα περιήγησης να μπορεί εύκολα να τα χειριστεί και να τα μεταβιβάσει πίσω.


Εδώ είναι ένα άρθρο για το Pyramid και το long-polling, το οποίο αποδεικνύεται ότι είναι πολύ εύκολο να ρυθμιστεί με λίγη βοήθεια από το gevent: [*TicTacToe και Long Polling με την Pyramid*](http://michael.merickel.org/2011/6/21/tictactoe-and-long-polling-with-pyramid/). Αυτή είναι η γνώμη μου, αλλά? όπως ακριβώς και οι τάξεις περίπτωση δεν, θα ήθελα να εφαρμόσουν μια `copy`μέθοδο του είδους στην τάξη για να καταστεί δυνατή η τροποποίηση, διατηρώντας παράλληλα το αμετάβλητο, αλλά υπάρχει ορισμένες περιπτώσεις που δεν μπορώ να βοηθήσω να το μεταβλητό? Για παράδειγμα, όταν κάτι αναμένεται να γίνει η λειτουργία αντιγραφής είναι πολύ μεγάλη και αργή για την κατηγορία? όπως όταν η τάξη έχει τόσα πολλά συχνά τροποποιημένο μέλη. Και μην ανησυχείτε για χιλιάδες περιπτώσεις που επιπλέουν γύρω στη μνήμη, επειδή είναι αυτόματα GC'ed, οπότε το πιο πραγματικό πρόβλημα είναι ο χρόνος κόστος της αντιγραφής περιπτώσεις της κλάσης. Παρακαλώ πείτε μου εάν η γνώμη μου είναι κάπως λάθος :) μπορείς να σβήσεις αυτά τα αρχεία. στην συνέχει μπες στο σύστημα και εγκατέστησε το πακέτο logrotate και δεν θα ξανασυμβεί. κανονικά θε έπρεπε να ήταν εγκατεστημένο.

για περισσότερα

[εικόνα]

[log files: καταγραφές, ρουφιάνοι και ανακύκλωση](https://cerebrux.net/2018/08/09/log-files-%ce%ba%ce%b1%cf%84%ce%b1%ce%b3%cf%81%ce%b1%cf%86%ce%ad%cf%82-%cf%81%ce%bf%cf%85%cf%86%ce%b9%ce%ac%ce%bd%ce%bf%ce%b9-%ce%ba%ce%b1%ce%b9-%ce%b1%ce%bd%ce%b1%ce%ba%cf%8d%ce%ba%ce%bb%cf%89/)

μας παρακολουθούν… όχι εκεί έξω… αλλά ο ίδιος σου… δες ένα απόσπασμα με την εντολή της αποσύνδεσης για να καταλάβεις:

listdelegate {

id: leavebutton

text: i18n("log out")

highlight: delegatehighlight

icon: "system-log-out"

onclicked: {

ex… Συχνά αυτό επιτυγχάνεται με τη χρήση [«Driven δεδομένων Συνδρομές»](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , αλλά αυτή η λειτουργία είναι διαθέσιμη μόνο σε ορισμένες εκδόσεις του SQL: Enterprise και Business Intelligence, αλλά όχι στο πρότυπο.


Έτσι, υπάρχει μια σειρά από δημιουργικές λύσεις. Αλλά δεν μου αρέσει κάποια από αυτές, και απαιτούν ένα δίκαιο κομμάτι της εργασίας έξω από SSRS.


Οι λύσεις που έχω δει περιλαμβάνουν: Δημιουργία της εγγραφής και στη συνέχεια απενεργοποίηση ή επιτρέπουν την εργασία SQL που στέλνει τη συνδρομή (που προσδιορίζονται από GUID.)


Δημιουργήστε ένα .exe .NET περιτύλιγμα για να χειριστεί την αποστολή του email. Μπορεί να εκτελέσετε το ερώτημα πρώτα να δούμε πόσα επέστρεψε σειρές, και στη συνέχεια, αν χρειαστεί, να δημιουργήσει την έκθεση και να συμπεριληφθεί σε ένα email. Έκανα τα εξής:


Αποθηκεύεται αυτόματα στη βάση δεδομένων κάθε φορά που κάτι νέο ήρθε.


Στη συνέχεια έτρεξε ένα php βρόχο που κάθε λίγα λεπτά ελέγχονται για να διαπιστωθεί αν υπάρχει κάτι νέο στη βάση δεδομένων που ταιριάζει με τις παραμέτρους του νέου αυτού συμβάντος (συμπεριλαμβανομένων ότι happenned εντός του χρονικού πλαισίου των τελευταίων λεπτών). Θα χρησιμοποιηθεί `flush();`και στη συνέχεια `sleep(120);`στο βρόχο για να πάρει το βρόχο για να συνεχίσει να τρέχει κάθε λίγα λεπτά, έως ότου η νέα info ήρθε στην οποία περίπτωση θα `break();`ή `die();`. δούλεψε σε rebornos, όταν κατσάρω το mint θα επανέλθω… (άν δεν το ξεχάσω)

ευχαριστώ!!! Από τα περαιτέρω σχόλια που έγιναν από τον συγγραφέα, που ψάχνουν για ένα Node.js ORM που λειτουργεί με δύο οδηγούς MySQL και Oracle.


Εκεί δεν φαίνεται να είναι πολλά ΝΤΥΠΑ που ταιριάζει η περιγραφή και είναι επίσης υποστηρίζονται (προειδοποίηση - βασίζονται αποκλειστικά σε λίγες αναζητήσεις του Google).


Υπάρχει μία διαπίστωσα ότι ταιριάζει με την περιγραφή αν και ακόμα φαίνεται να υποστηρίζεται ενεργά και ότι είναι knex (βλ <https://knexjs.org> ).