Διαχείριση Συνεδριών ASP.NET [Παράδειγμα]

⚡ Έξυπνη Σύνοψη

Η Διαχείριση Περιόδων Λειτουργίας ASP.NET επιτρέπει σε μια εφαρμογή HTTP χωρίς κατάσταση να θυμάται τα δεδομένα χρήστη σε όλα τα αιτήματα. Εξηγεί το ViewState, το αντικείμενο Session για την αποθήκευση ζευγών κλειδιού-τιμής, ένα λειτουργικό παράδειγμα, τις λειτουργίες κατάστασης περιόδου λειτουργίας, τη ρύθμιση παραμέτρων χρονικού ορίου και τα πλεονεκτήματα της κατάστασης περιόδου λειτουργίας.

  • 🌐 HTTP χωρίς κατάσταση: Το HTTP δεν διατηρεί δεδομένα μεταξύ των αιτημάτων, επομένως το ASP.NET προσθέτει μηχανισμούς για τη διατήρηση της κατάστασης.
  • 🗂️ Κατάσταση προβολής: Το ViewState μεταφέρει αυτόματα τιμές ελέγχου από τη μία σελίδα στην επόμενη.
  • 🔑 Αντικείμενο συνεδρίας: Η συνεδρία[“Κλειδί”] αποθηκεύει και ανακτά ζεύγη κλειδιού-τιμής καθ' όλη τη διάρκεια του κύκλου ζωής της εφαρμογής.
  • ⚙️ Λειτουργίες κατάστασης: Η κατάσταση περιόδου λειτουργίας μπορεί να αποθηκευτεί στο InProc, σε έναν StateServer, στον SQL Server ή σε έναν προσαρμοσμένο χώρο αποθήκευσης.
  • Χρονικό όριο: Το χρονικό όριο sessionState στο web.config ελέγχει για πόσο καιρό μια συνεδρία παραμένει ενεργή.

Εκμάθηση Διαχείρισης Συνεδριών ASP.NET με Παράδειγμα

Διαχείριση συνεδρίας 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 Εξήγηση:-

  1. Η πρώτη γραμμή κώδικα λαμβάνει την τιμή του στοιχείου ελέγχου Name του πλαισίου κειμένου και την αποθηκεύει στο αντικείμενο Session. Καθορίζοντας τον κωδικό Session[“Όνομα”], δίνουμε στην ιδιότητα ένα όνομα που ονομάζεται “Όνομα”. Καθορίζοντας ένα όνομα για την ιδιότητα, γίνεται ευκολότερη η ανάκτησή της σε μεταγενέστερο χρονικό σημείο.
  2. Η επόμενη γραμμή κώδικα ανακτά την αποθηκευμένη τιμή από το αντικείμενο Session. Στη συνέχεια, γράφει αυτήν την τιμή μέσω της μεθόδου 'Response.Write' πίσω στον πελάτη.
  3. Τέλος, κάνουμε όλα τα στοιχεία ελέγχου στη φόρμα αόρατα. Εάν δεν το κάνουμε αυτό, όλα τα στοιχεία ελέγχου συν τις τιμές απόκρισης θα εμφανίζονται μαζί.

Μόλις κάνετε τις παραπάνω αλλαγές, θα δείτε το ακόλουθο αποτέλεσμα.

Παραγωγή:

Χρησιμοποιήστε το αντικείμενο συνεδρίας

Από την έξοδο, μπορείτε να δείτε ότι η τιμή 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).
  • Η αποθήκευση μεγάλων ποσοτήτων δεδομένων ανά χρήστη μπορεί να επηρεάσει αρνητικά την απόδοση υπό μεγάλο φόρτο εργασίας.

Συχνές Ερωτήσεις

Ναι. Οι βοηθοί τεχνητής νοημοσύνης μπορούν να δημιουργήσουν τον κώδικα για την αποθήκευση και την ανάγνωση τιμών περιόδου σύνδεσης, να προτείνουν τη σωστή λειτουργία κατάστασης και να γράψουν τις ρυθμίσεις του web.config. RevΔείτε τον δημιουργημένο κώδικα για να επιβεβαιώσετε ότι ταιριάζει στις ανάγκες σας για επεκτασιμότητα και ασφάλεια.

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

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

Όχι. Κάθε χρήστης λαμβάνει μια ξεχωριστή συνεδρία, η οποία αναγνωρίζεται από ένα μοναδικό αναγνωριστικό συνεδρίας που είναι αποθηκευμένο σε ένα cookie. Ένας χρήστης δεν μπορεί να διαβάσει τις τιμές συνεδρίας ενός άλλου χρήστη, γι' αυτό και η Συνεδρία χρησιμοποιείται για δεδομένα ανά χρήστη.

Συνοψίστε αυτήν την ανάρτηση με: