Πώς και γιατί τα αναγνωριστικά περιόδων λειτουργίας εκ νέου στο ASP.NET

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 899918 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

ΕΙΣΑΓΩΓΗ

Αυτό το άρθρο περιγράφει τον τρόπο και για ποιο λόγο χρησιμοποιούνται οι αναγνωριστικά περιόδου λειτουργίας του Microsoft ASP.NET.

Περισσότερες πληροφορίες

Η κατάσταση περιόδου λειτουργίας ASP.NET είναι μια τεχνολογία που επιτρέπει την αποθήκευση δεδομένων του διακομιστή, το συγκεκριμένο χρήστη. Οι εφαρμογές Web να χρησιμοποιήσετε αυτά τα δεδομένα για την επεξεργασία των αιτήσεων από το χρήστη για τον οποίο έχει παρουσίες της κατάστασης περιόδου λειτουργίας. Κατάσταση λειτουργίας χρήστη προσδιορίζεται από το αναγνωριστικό μιας περιόδου λειτουργίας. Το Αναγνωριστικό περιόδου λειτουργίας είναι παράδοση, χρησιμοποιώντας μία από τις ακόλουθες μεθόδους:
  • Το Αναγνωριστικό περιόδου λειτουργίας είναι τμήμα ενός cookie που αποστέλλονται στο πρόγραμμα περιήγησης του χρήστη.
  • Το Αναγνωριστικό περιόδου λειτουργίας είναι ενσωματωμένες στη διεύθυνση URL. Η τεχνική αυτή είναι επίσης γνωστή ως έναχωρίς cookie περιόδου λειτουργίας.
Αναγνωριστικό περιόδου λειτουργίας είναι ένας τυχαίος αριθμός 120-bit που αντιπροσωπεύεται από μια ακολουθία 20 χαρακτήρων. Η συμβολοσειρά είναι διαμορφωμένο έτσι ώστε να μπορούν να συμπεριληφθούν σε μια διεύθυνση URL και δεν χρειάζεται να υποστεί στη κωδικοποίηση URL. Για παράδειγμα, η συμβολοσειρά μπορεί να χρησιμοποιηθεί σε περιόδους λειτουργίας χωρίς cookie. Το πιο συχνά χρησιμοποιούμενη μέθοδος παράδοσης αναγνωριστικά περιόδου είναι η χρήση cookies για να αποθηκεύσετε τα αναγνωριστικά περιόδων λειτουργίας.

Όταν ένας χρήστης ανοίγει για πρώτη φορά το πρόγραμμα περιήγησης στο Web και στη συνέχεια μεταβαίνει σε μια τοποθεσία Web που υλοποιεί η κατάσταση περιόδου λειτουργίας ASP.NET, το cookie αποστέλλεται στο πρόγραμμα περιήγησης με το όνομα "ASP.NET_SessionId" και μια τιμή 20 χαρακτήρων.

Όταν ο χρήστης μεταβεί εντός του ίδιου τομέα DNS, το πρόγραμμα περιήγησης Web εξακολουθεί να στείλετε αυτό το cookie στον τομέα του οποίου έγινε sourced.

Για παράδειγμα, app1.tailspintoys.com και app2.tailspintoys.com είναι και οι δύο εφαρμογές ASP.NET. Εάν ο χρήστης μεταβαίνει app1.tailspintoys.com και μεταβαίνει στο app2.tailspintoys.com, και οι δύο εφαρμογές θα χρησιμοποιούν το ίδιο cookie και το ίδιο Αναγνωριστικό περιόδου λειτουργίας για την παρακολούθηση της κατάστασης περιόδου λειτουργίας του χρήστη μέσα σε κάθε εφαρμογή. Οι εφαρμογές δεν κάνουν κοινή χρήση στην ίδια κατάσταση περιόδου λειτουργίας. Οι εφαρμογές μοιράζεστε μόνο το αναγνωριστικό της περιόδου λειτουργίας.

Επομένως, μπορείτε να επαναχρησιμοποιήσετε αναγνωριστικά περιόδου λειτουργίας για πολλούς λόγους. Για παράδειγμα, εάν εκ νέου χρήση αναγνωριστικών την περίοδο λειτουργίας, δεν χρειάζεται να κάνετε τα εξής:
  • Δημιουργήστε ένα νέο Αναγνωριστικό κρυπτογραφικά μοναδική περίοδο λειτουργίας όταν θα παρουσιάζονται με αναγνωριστικό μια έγκυρη περίοδο λειτουργίας.
  • Δημιουργήστε μια νέα περίοδο λειτουργίας ID για κάθε εφαρμογή ASP.NET, η οποία βρίσκεται σε έναν μόνο τομέα.
Όταν η εφαρμογή Web απαιτεί μια σύνδεση και προσφέρει αποσύνδεσης σελίδας ή επιλογή, συνιστάται να απενεργοποιήσετε την κατάσταση περιόδου λειτουργίας όταν ο χρήστης έχει αποσυνδεθεί από την τοποθεσία Web. Για να απενεργοποιήσετε την κατάσταση περιόδου λειτουργίας, καλέστε τοSession.AbandonΗ μέθοδος. Για ναSession.Abandonη μέθοδος σάς επιτρέπει να εκκαθαρίσει την κατάσταση περιόδου λειτουργίας χωρίς αναμονή για το χρονικό όριο της κατάστασης περιόδου λειτουργίας. Από προεπιλογή, αυτό το χρονικό όριο είναι ένα κυλιόμενο λήξης 20 λεπτών. Λήξη αυτή ανανεώνεται κάθε φορά που ο χρήστης κάνει μια αίτηση για την τοποθεσία Web και παρουσιάζει το cookie Αναγνωριστικού περιόδου λειτουργίας. Για ναΕγκατάλειψηη μέθοδος ορίζει μια σημαία στο αντικείμενο κατάστασης περιόδου λειτουργίας που υποδεικνύει ότι πρέπει να διακοπεί η κατάσταση περιόδου λειτουργίας. Η σημαία έχει εξεταστεί και μετά ενεργούσαν κατά το τέλος της σελίδας σε. Επομένως, ο χρήστης να χρησιμοποιήσετε αντικείμενα περιόδου λειτουργίας μέσα στη σελίδα μετά την κλήση τουΕγκατάλειψηΗ μέθοδος. Μόλις ολοκληρωθεί η επεξεργασία σελίδας, καταργείται η περίοδος λειτουργίας.

Όταν χρησιμοποιείτε τη λειτουργία της κατάστασης περιόδου λειτουργίας σε εξέλιξη, αυτά τα αντικείμενα της κατάστασης περιόδου λειτουργίας αποθηκεύονται στο HttpCache του. Το HttpCache υποστηρίζει μια μέθοδο κλήσης όταν είναι αληθής οι ακόλουθες συνθήκες:
  • Μια καταχώρηση στο χώρο αποθήκευσης καταργείται.
  • Καταχωρεί τη Διαχείριση περιόδου λειτουργίας της κατάστασης τουSession_OnEndevent handler to be called when the cache entry is removed.
When the Session State Manager removes a session state object that resides in the cache, the HttpCache manager will call any registered callbacks. In effect, this behavior raises theSession_OnEndτο πρόγραμμα χειρισμού συμβάντων.

When you abandon a session, the session ID cookie is not removed from the browser of the user. Therefore, as soon as the session has been abandoned, any new requests to the same application will use the same session ID but will have a new session state instance. At the same time, if the user opens another application within the same DNS domain, the user will not lose their session state after theAbandonmethod is called from one application.

Sometimes, you may not want to reuse the session ID. If you do and if you understand the ramifications of not reusing the session ID, use the following code example to abandon a session and to clear the session ID cookie:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
This code example clears the session state from the server and sets the session state cookie to null. The null value effectively clears the cookie from the browser.

When a user does not log off from the application and the session state time-out occurs, the application may still use the same session state cookie if the browser is not closed. This behavior causes the user to be directed to the logon page and the session state cookie of the user to be presented. To guarantee that a new session ID is used when you open the logon page (login.aspx), send a null cookie back to the client. To do this, add a cookie to the response collection. Then, send the response collection back to the client. The easiest way to send a null cookie is by using theResponse.RedirectΗ μέθοδος. Because the cookies collection always has a value for the ASP.NET_SessionId, you cannot just test if this cookie exists because you will create aResponse.Redirectloop. You can set a query string on the redirect to the logon page.

Or, as illustrated in the following code example, you can use a different cookie to tell if you are already redirected to the logon page. To help enhance security and to make sure that no one tries to open the logon page by using a second cookie together with the ASP.NET cookie, the following code example uses theFormsAuthenticationclass to encrypt and decrypt the cookie data. Then, the code example sets a 5-second time-out.
private void Page_Load(object sender, System.EventArgs e)
{ 
if( !IsPostBack && 
( Request.Cookies["__LOGINCOOKIE__"] == null ||
Request.Cookies["__LOGINCOOKIE__"].Value == "" ) )
{
//At this point, we do not know if the session ID that we have is a new
//session ID or if the session ID was passed by the client. 
//Update the session ID.

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

//To make sure that the client clears the session ID cookie, respond to the client to tell 
//it that we have responded. To do this, set another cookie.
AddRedirCookie();
Response.Redirect( Request.Path );
}

//Make sure that someone is not trying to spoof.
try
{
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt( Request.Cookies["__LOGINCOOKIE__"].Value );

if( ticket == null || ticket.Expired == true ) 
throw new Exception();

RemoveRedirCookie();
}
catch
{
//If someone is trying to spoof, do it again.
AddRedirCookie();
Response.Redirect( Request.Path );
}


Response.Write("Session.SessionID="+Session.SessionID+"<br/>");
Response.Write("Cookie ASP.NET_SessionId="+Request.Cookies["ASP.NET_SessionId"].Value+"<br/>");
} 

private void RemoveRedirCookie() 
{ 
Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", "")); 
} 

private void AddRedirCookie()
{

FormsAuthenticationTicket ticket = 
new FormsAuthenticationTicket(1,"Test",DateTime.Now,DateTime.Now.AddSeconds(5), false,""); 
string encryptedText = FormsAuthentication.Encrypt( ticket ); 
Response.Cookies.Add( new HttpCookie( "__LOGINCOOKIE__", encryptedText ) );
}

Ιδιότητες

Αναγν. άρθρου: 899918 - Τελευταία αναθεώρηση: Πέμπτη, 23 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft .NET Framework 1.1
Λέξεις-κλειδιά: 
kbinfo kbhowto kbmt KB899918 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:899918

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com