Το HTTP είναι ένα πρωτόκολλο χωρίς κατάσταση. Κάθε αίτημα είναι ανεξάρτητο και η εκτέλεση και τα αποτελέσματά του δεν σχετίζονται άμεσα με το προηγούμενο αίτημα και το επόμενο αίτημα και δεν θα επηρεαστούν άμεσα από την απάντηση στο προηγούμενο αίτημα, ούτε θα επηρεάσουν άμεσα την απάντηση στο επόμενο αίτημα.
Στην πραγματικότητα, το σύστημά μας συχνά υποστηρίζει τους χρήστες να μοιράζονται τα ίδια δεδομένα (κατάσταση) μεταξύ του προγράμματος περιήγησης πελάτη και του διακομιστή πολλαπλά αιτήματα, όπως τα στοιχεία του λογαριασμού σύνδεσης του χρήστη. Επομένως, το ASP.NET παρέχει πολλές μεταβλητές για τη διαχείριση της κατάστασης: κατάσταση εφαρμογής, κατάσταση περιόδου λειτουργίας, κατάσταση προβολής κ.λπ.
Το αντικείμενο HttpContext προορίζεται μόνο για μία αίτηση http.Οι ιδιότητες αυτής της κλάσης περιλαμβάνουν επίσης αντικείμενα αιτήματος, αντικείμενα απόκρισης, αντικείμενα συνεδρίας κ.λπ. Αυτή είναι η συλλογή Items της κλάσης HttpContext, η οποία περιέχει ένα αντικείμενο πίνακα κατακερματισμού με τη μορφή κλειδιού-τιμής.
Αρχικά, ας δούμε τον σκοπό του HttpContext.Current.Items, το οποίο λειτουργεί μόνο σε ένα μόνο αίτημα χρήστη (HttpContext.Current.Items ισχύει για ένα μόνο HTTPRequest). Όταν ολοκληρωθεί αυτό το αίτημα, η συλλογή τεκμηρίων θα χαθεί όταν οι πληροφορίες του διακομιστή αποσταλούν πίσω στο πρόγραμμα περιήγησης. Το αντικείμενο Session είναι για τη συνεδρία του χρήστη, δηλαδή ενεργεί σε πολλαπλά αιτήματα χρήστη και οι πληροφορίες χάνονται μετά τη λήξη της συνεδρίας.
Δεδομένου ότι το HttpContext.Current.Items έχει τόσο σύντομο κύκλο ζωής, υπό ποιες συνθήκες μπορεί να χρησιμοποιηθεί; Σημειώνεται εδώ ότι το HttpContext.Current.Items μπορεί να χρησιμοποιηθεί κατά την κοινή χρήση δεδομένων μεταξύ HttpModule και HTTPHandler, επειδή κάθε αίτημα χρήστη περνά από τη διοχέτευση χρόνου εκτέλεσης HTTP HttpModule, HTTPHandler. Όταν εφαρμόζετε τη μέθοδο IHttpMoudle για να μεταβιβάσετε πληροφορίες στο αίτημα χρήστη μέσω HttpMoudle. Μπορείτε να χρησιμοποιήσετε το HttpContext.Current.Items για να μεταφέρετε δεδομένα σε διαφορετικές σελίδες αιτημάτων και διαφορετικά HttpModules, αλλά μόλις τελειώσει το αίτημα και αναρτηθούν τα δεδομένα, τα δεδομένα σε αυτήν τη συλλογή θα χαθούν από μόνα τους. Όπως φαίνεται στο παρακάτω σχήμα:
Επιπλέον, όταν η σελίδα διακομιστή μεταπηδά (Server.Execute/Server.Transfer), μπορούμε να χρησιμοποιήσουμε το HttpContext.Current.Items για να περάσουμε δεδομένα μεταξύ των δύο φορμών.
Προφανώς, εάν αλλάξετε το Server.Transfer σε Response.Redirect, δεν θα μπορείτε να λάβετε τα δεδομένα στο HttpContext.Current.Items στη νέα σελίδα επειδή είναι διαφορετικό αίτημα Http. System.NullReferenceException: Η αναφορά αντικειμένου δεν έχει οριστεί στην παρουσία του αντικειμένου.
|