Δεν έδωσα ιδιαίτερη σημασία σε αυτό όταν σπούδαζα πριν, αλλά σήμερα επέστρεψα και μελέτησα προσεκτικά τον κύκλο ζωής της συνεδρίας. Οι συνεδρίες αποθηκεύονται στην πλευρά του διακομιστή και γενικά για να μην βρίσκονται στη μνήμη του διακομιστή (για πρόσβαση υψηλής ταχύτητας), το Sessinon δημιουργεί την πρώτη φορά που ο χρήστης αποκτά πρόσβαση στον διακομιστή.Σημειώστε ότι μόνο η πρόσβαση σε JSP, Servlet και άλλα προγράμματα θα δημιουργήσει μια συνεδρία και μόνο η πρόσβαση σε στατικούς πόρους όπως HTML και IMAGE δεν θα δημιουργήσει μια συνεδρία.
Πότε λήγει μια συνεδρία;
1. Ο διακομιστής θα διαγράψει τη συνεδρία από τη μνήμη του διακομιστή που είναι ανενεργή για μεγάλο χρονικό διάστημα και η περίοδος λειτουργίας θα είναι άκυρη. Ο προεπιλεγμένος χρόνος λήξης μιας συνεδρίας στο Tomcat είναι 20 λεπτά.
2. Καλέστε τη μέθοδο ακύρωσης της συνεδρίας.
Απαιτήσεις περιόδου λειτουργίας για προγράμματα περιήγησης:
Παρόλο που η συνεδρία αποθηκεύεται στον διακομιστή και είναι διαφανής για τον πελάτη, η κανονική λειτουργία της εξακολουθεί να απαιτεί την υποστήριξη του προγράμματος περιήγησης του πελάτη. Αυτό συμβαίνει επειδή το Session πρέπει να χρησιμοποιεί cookies ως αναγνωριστικό. Το πρωτόκολλο HTTP είναι ανιθαγενές και η περίοδος λειτουργίας δεν μπορεί να κριθεί από τη σύνδεση HTTP για να προσδιοριστεί εάν πρόκειται για τον ίδιο πελάτη, επομένως ο διακομιστής στέλνει ένα cookie που ονομάζεται JSESSIONID στο πρόγραμμα περιήγησης πελάτη, το οποίο έχει την τιμή του αναγνωριστικού της περιόδου λειτουργίας (δηλαδή, την τιμή επιστροφής του HttpSession.getId()). Το Session χρησιμοποιεί το cookie για να προσδιορίσει εάν πρόκειται για τον ίδιο χρήστη.
Αυτό το cookie δημιουργείται αυτόματα από τον διακομιστή και το χαρακτηριστικό maxAge είναι συνήθως -1, πράγμα που σημαίνει ότι ισχύει μόνο στο τρέχον πρόγραμμα περιήγησης και δεν μοιράζεται μεταξύ των παραθύρων του προγράμματος περιήγησης και δεν θα είναι έγκυρο όταν το πρόγραμμα περιήγησης είναι κλειστό. Επομένως, όταν δύο παράθυρα του προγράμματος περιήγησης στον ίδιο υπολογιστή έχουν πρόσβαση στον διακομιστή, δημιουργούνται δύο διαφορετικές περίοδοι λειτουργίας. Εκτός από τα νέα παράθυρα που ανοίγουν με συνδέσμους, σενάρια κ.λπ. εντός του παραθύρου του προγράμματος περιήγησης (δηλαδή όχι παράθυρα που ανοίγουν με διπλό κλικ στα εικονίδια του προγράμματος περιήγησης στην επιφάνεια εργασίας κ.λπ.). Αυτά τα θυγατρικά παράθυρα μοιράζονται το cookie του γονικού παραθύρου και επομένως μια περίοδο λειτουργίας.
Σημείωση: Οι νέες περίοδοι σύνδεσης δημιουργούνται στα παράθυρα του προγράμματος περιήγησης που άνοιξαν πρόσφατα, εκτός από τα δευτερεύοντα παράθυρα. Το θυγατρικό παράθυρο μοιράζεται την περίοδο λειτουργίας του γονικού παραθύρου. Για παράδειγμα, όταν κάνετε δεξί κλικ σε έναν σύνδεσμο και επιλέγετε "Άνοιγμα σε νέο παράθυρο" στο μενού συντόμευσης που εμφανίζεται, το θυγατρικό παράθυρο μπορεί να έχει πρόσβαση στη συνεδρία του γονικού παραθύρου.
Τι γίνεται αν το πρόγραμμα περιήγησης του πελάτη απενεργοποιήσει τα cookies ή δεν υποστηρίζει cookies; Για παράδειγμα, η συντριπτική πλειοψηφία των προγραμμάτων περιήγησης για κινητά δεν υποστηρίζει cookies. Το Java Web προσφέρει μια άλλη λύση: επανεγγραφή διεύθυνσης URL. Η επανεγγραφή διεύθυνσης URL είναι μια λύση για υπολογιστές-πελάτες που δεν υποστηρίζουν cookies. Η αρχή της επανεγγραφής διεύθυνσης URL είναι η επανεγγραφή των πληροφοριών αναγνωριστικού της περιόδου σύνδεσης του χρήστη στη διεύθυνση URL. Ο διακομιστής μπορεί να αναλύσει την ξαναγραμμένη διεύθυνση URL για να λάβει το αναγνωριστικό περιόδου λειτουργίας. Με αυτόν τον τρόπο, ακόμη και αν ο πελάτης δεν υποστηρίζει cookies, η περίοδος λειτουργίας μπορεί να χρησιμοποιηθεί για την καταγραφή της κατάστασης του χρήστη. Η κλάση HttpServletResponse παρέχει encodeURL (String url) για την υλοποίηση της επανεγγραφής διευθύνσεων URL, η οποία καθορίζει αυτόματα εάν ο πελάτης υποστηρίζει cookies. Εάν ο πελάτης υποστηρίζει cookies, η διεύθυνση URL θα εξάγεται ως έχει. Εάν ο πελάτης δεν υποστηρίζει cookies, το αναγνωριστικό της περιόδου λειτουργίας χρήστη ξαναγράφεται στη διεύθυνση URL.
Σημείωση: Το TOMCAT καθορίζει εάν ένα πρόγραμμα περιήγησης πελάτη υποστηρίζει cookies με βάση το εάν ένα cookie περιλαμβάνεται στο αίτημα. Παρόλο που ο πελάτης μπορεί να υποστηρίζει cookies, καθώς δεν μεταφέρονται cookies με το πρώτο αίτημα (επειδή δεν υπάρχουν cookies που μπορούν), η ξαναγραμμένη διεύθυνση URL θα εξακολουθεί να έχει jsessionid στη διεύθυνση. Ο διακομιστής έχει ήδη γράψει ένα cookie στο πρόγραμμα περιήγησης κατά τη δεύτερη επίσκεψη, επομένως η ξαναγραμμένη διεύθυνση URL δεν θα έχει jsessionid στη διεύθυνση.
|