Διαχείριση Συνεδριών ASP.NET [Παράδειγμα]
⚡ Έξυπνη Σύνοψη
Η Διαχείριση Περιόδων Λειτουργίας ASP.NET επιτρέπει σε μια εφαρμογή HTTP χωρίς κατάσταση να θυμάται τα δεδομένα χρήστη σε όλα τα αιτήματα. Εξηγεί το ViewState, το αντικείμενο Session για την αποθήκευση ζευγών κλειδιού-τιμής, ένα λειτουργικό παράδειγμα, τις λειτουργίες κατάστασης περιόδου λειτουργίας, τη ρύθμιση παραμέτρων χρονικού ορίου και τα πλεονεκτήματα της κατάστασης περιόδου λειτουργίας.
Διαχείριση συνεδρίας ASP.NET
Το πρωτόκολλο HTTP στο οποίο λειτουργούν όλες οι εφαρμογές Ιστού είναι πρωτόκολλο χωρίς κατάσταση. Με τον όρο ανιθαγενής, σημαίνει απλώς ότι οι πληροφορίες δεν διατηρούνται από το ένα αίτημα στο άλλο.
Για παράδειγμα, εάν είχατε μια σελίδα σύνδεσης με 2 πλαίσια κειμένου, ένα για το όνομα και το άλλο για τον κωδικό πρόσβασης. Όταν κάνετε κλικ στο κουμπί Σύνδεση σε αυτήν τη σελίδα, η εφαρμογή πρέπει να διασφαλίσει ότι το όνομα χρήστη και ο κωδικός πρόσβασης θα περάσουν στην επόμενη σελίδα.
Στο ASP.Net, αυτό γίνεται με διάφορους τρόπους. Ο πρώτος τρόπος είναι μέσω μιας έννοιας που ονομάζεται ViewState. Εδώ το ASP.Net αποθηκεύει αυτόματα τα περιεχόμενα όλων των στοιχείων ελέγχου. Επίσης, διασφαλίζει ότι αυτό μεταβιβάζεται στην επόμενη σελίδα. Αυτό γίνεται μέσω μιας ιδιότητας που ονομάζεται ViewState.
Δεν είναι ιδανικό για έναν προγραμματιστή να αλλάξει κάτι στην κατάσταση προβολής. Αυτό συμβαίνει επειδή θα πρέπει να το χειρίζεται μόνο το ASP.Net.
Αντικείμενο συνεδρίας ASP.NET
Ο άλλος τρόπος είναι να χρησιμοποιήσετε ένα αντικείμενο που ονομάζεται "Αντικείμενο περιόδου λειτουργίας". Το αντικείμενο Session είναι διαθέσιμο σε όλο τον κύκλο ζωής της εφαρμογής. Μπορείτε να αποθηκεύσετε οποιονδήποτε αριθμό ζευγών κλειδιών-τιμών στο αντικείμενο Session. Έτσι, σε οποιαδήποτε σελίδα, μπορείτε να αποθηκεύσετε μια τιμή στο αντικείμενο Session μέσω της παρακάτω γραμμής κώδικα.
Session["Key"] = value
Αυτό αποθηκεύει την τιμή σε ένα αντικείμενο Session και το τμήμα 'κλειδί' χρησιμοποιείται για να δώσει στην τιμή ένα όνομα. Αυτό επιτρέπει την ανάκτηση της τιμής σε μεταγενέστερο χρονικό σημείο. Για να ανακτήσετε μια τιμή, μπορείτε απλώς να εκτελέσετε την παρακάτω εντολή.
Session["Key"]
Παράδειγμα αντικειμένου περιόδου λειτουργίας ASP.NET
Στο παράδειγμά μας, θα χρησιμοποιήσουμε το αντικείμενο Session για να αποθηκεύσουμε το όνομα που καταχωρήθηκε στο πεδίο κειμένου ονόματος στη σελίδα. Στη συνέχεια, θα ανακτήσουμε αυτήν την τιμή και θα την εμφανίσουμε στη σελίδα ανάλογα. Ας προσθέσουμε τον παρακάτω κώδικα στο αρχείο Demo.aspx.cs.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Εξήγηση:-
- Η πρώτη γραμμή κώδικα λαμβάνει την τιμή του στοιχείου ελέγχου Name του πλαισίου κειμένου και την αποθηκεύει στο αντικείμενο Session. Καθορίζοντας τον κωδικό Session[“Όνομα”], δίνουμε στην ιδιότητα ένα όνομα που ονομάζεται “Όνομα”. Καθορίζοντας ένα όνομα για την ιδιότητα, γίνεται ευκολότερη η ανάκτησή της σε μεταγενέστερο χρονικό σημείο.
- Η επόμενη γραμμή κώδικα ανακτά την αποθηκευμένη τιμή από το αντικείμενο Session. Στη συνέχεια, γράφει αυτήν την τιμή μέσω της μεθόδου 'Response.Write' πίσω στον πελάτη.
- Τέλος, κάνουμε όλα τα στοιχεία ελέγχου στη φόρμα αόρατα. Εάν δεν το κάνουμε αυτό, όλα τα στοιχεία ελέγχου συν τις τιμές απόκρισης θα εμφανίζονται μαζί.
Μόλις κάνετε τις παραπάνω αλλαγές, θα δείτε το ακόλουθο αποτέλεσμα.
Παραγωγή:
Από την έξοδο, μπορείτε να δείτε ότι η τιμή Session του ονόματος ανακτήθηκε και εμφανίστηκε στο πρόγραμμα περιήγησης.
Λειτουργίες κατάστασης περιόδου λειτουργίας ASP.NET
Το ASP.NET μπορεί να αποθηκεύσει δεδομένα περιόδου λειτουργίας σε διάφορα σημεία, που ονομάζονται λειτουργίες κατάστασης περιόδου λειτουργίας. Η λειτουργία που επιλέγετε επηρεάζει την απόδοση, την επεκτασιμότητα και το εάν τα δεδομένα επιβιώνουν μετά από επανεκκίνηση εφαρμογής. Ο παρακάτω πίνακας τα συγκρίνει:
| Τρόπος | Πού αποθηκεύεται η κατάσταση | καλυτερα for |
|---|---|---|
| InProc | Στη μνήμη του διακομιστή ιστού (προεπιλογή) | Εφαρμογές ενός διακομιστή. Ταχύτερες, αλλά χαμένες κατά την επανεκκίνηση |
| Διακομιστής κατάστασης | Μια ξεχωριστή διαδικασία ASP.NET State Service | Web farms· επιβιώνει από επανεκκινήσεις εφαρμογών |
| SQLServer | Μια βάση δεδομένων SQL Server | Διαδικτυακά αγροκτήματα που χρειάζονται ανθεκτική, κλιμακούμενη κατάσταση |
| Εξατομικευμένο | Ένας προσαρμοσμένος πάροχος που εφαρμόζετε | Εξειδικευμένα καταστήματα όπως το Redis |
| Εκτός | Η κατάσταση περιόδου λειτουργίας είναι απενεργοποιημένη | Εφαρμογές που δεν χρειάζονται συνεδρίες |
Το InProc είναι το προεπιλεγμένο και το ταχύτερο, αλλά για αναπτύξεις με εξισορρόπηση φόρτου, το StateServer ή το SQLServer διατηρεί τις συνεδρίες διαθέσιμες σε πολλούς διακομιστές.
Πώς να ρυθμίσετε το χρονικό όριο περιόδου λειτουργίας στο ASP.NET
Μια συνεδρία δεν διαρκεί για πάντα. λήγει μετά από μια περίοδο αδράνειας. Μπορείτε να ορίσετε αυτό το χρονικό όριο στο αρχείο web.config χρησιμοποιώντας το στοιχείο sessionState, όπου η τιμή του χρονικού ορίου είναι σε λεπτά:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Μπορείτε επίσης να το ορίσετε στον κώδικα με Session.Timeout = 30;Το προεπιλεγμένο χρονικό όριο είναι 20 λεπτά. Η επιλογή μικρότερου χρονικού ορίου απελευθερώνει μνήμη διακομιστή πιο γρήγορα και βελτιώνει την ασφάλεια, ενώ ένα μεγαλύτερο χρονικό όριο διατηρεί τους χρήστες συνδεδεμένους για μεγαλύτερο χρονικό διάστημα.
Πλεονεκτήματα και μειονεκτήματα της κατάστασης περιόδου σύνδεσης
Η κατάσταση περιόδου λειτουργίας είναι βολική, αλλά έχει και αντισταθμίσεις που θα πρέπει να σταθμίσετε προτού βασιστείτε σε αυτήν σε μεγάλο βαθμό.
Πλεονεκτήματα:
- Απλό στη χρήση για την αποθήκευση δεδομένων ανά χρήστη, όπως ένα κατάστημαping καλάθι αγορών ή στοιχεία σύνδεσης.
- Μπορεί να αποθηκεύσει σύνθετα αντικείμενα, όχι μόνο συμβολοσειρές.
- Τα δεδομένα διατηρούνται στον διακομιστή, επομένως είναι πιο ασφαλή από την αποθήκευση στην πλευρά του πελάτη.
Μειονεκτήματα:
- Η λειτουργία InProc καταναλώνει μνήμη διακομιστή και δεν κλιμακώνεται σε μια συστοιχία web.
- Τα δεδομένα περιόδου λειτουργίας χάνονται όταν λήξει το χρονικό όριο της περιόδου λειτουργίας ή γίνει επανεκκίνηση της εφαρμογής (σε λειτουργία InProc).
- Η αποθήκευση μεγάλων ποσοτήτων δεδομένων ανά χρήστη μπορεί να επηρεάσει αρνητικά την απόδοση υπό μεγάλο φόρτο εργασίας.



