เหตุใด และอย่างไรเซสชันได้เข้ารหัสเป็น reused ใน ASP.NET

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 899918 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

บทนำ

บทความนี้อธิบายวิธีการ และเหตุใดรหัสเซสชัน ASP.NET ที่ Microsoft ใช้

ข้อมูลเพิ่มเติม

สถานะของเซสชัน ASP.NET เป็นเทคโนโลยีที่ช่วยให้คุณเก็บข้อมูล ฝั่งเซิร์ฟเวอร์ เฉพาะของผู้ใช้ โปรแกรมประยุกต์เว็บสามารถใช้ข้อมูลนี้เพื่อประมวลผลการร้องขอจากผู้ใช้ซึ่ง instantiated สถานะเซสชัน ผู้ใช้สถานะเซสชันถูกกำหนด โดยมีรหัสของเซสชัน ID เซสชันได้มีการจัดส่ง โดยใช้หนึ่งในวิธีการต่อไปนี้:
  • รหัสรอบเวลาเป็นส่วนหนึ่งของคุกกี้ที่ถูกส่งไปยังเบราว์เซอร์ของผู้ใช้
  • ID เซสชันถูกฝังอยู่ใน URL เทคนิคนี้จะเรียกว่าเป็นเซสชันคุกกี้อย่างน้อยกว่า.
เซสชันได้เข้ารหัสเป็นตัวเลขสุ่ม 120 บิตซึ่งแสดง โดยสตริงที่ 20 อักขระ สายอักขระถูกจัดรูปแบบเพื่อให้สามารถถูกรวมไว้ใน URL และไม่มีการ undergo URL ในการเข้ารหัส ตัวอย่างเช่น สตริอาจถูกใช้ในเซสชันน้อยกว่าคุกกี้ วิธีการส่งหมายเลขของเซสชันที่ใช้บ่อยที่สุดได้ โดยใช้คุกกี้เพื่อเก็บค่ารหัสของเซสชัน

เมื่อผู้ใช้ก่อน เปิดเว็บเบราว์เซอร์ของตน และไปยังเว็บไซต์ที่ใช้สถานะเซสชัน ASP.NET คุกกี้ถูกส่งไปยังเบราว์เซอร์ มีชื่อ "ASP.NET_SessionId" และค่า 20 อักขระ

เมื่อผู้ใช้ภายในโดเมน DNS เดียวกันค้น เว็บเบราว์เซอร์ยังคงมีอยู่เพื่อที่ส่งคุกกี้นี้กับโดเมนที่จะถูก sourced

ตัวอย่างเช่น app1.tailspintoys.com และ app2.tailspintoys.com เป็นโปรแกรมประยุกต์ ASP.NET ทั้งสอง ถ้าผู้ใช้ไปยัง app1.tailspintoys.com และไป app2.tailspintoys.com แอปพลิเคชันทั้งสองจะใช้คุกกี้ที่เหมือนกันและหมายเลขเซสชันเดียวกันเพื่อติดตามสถานะเซสชันของผู้ใช้ภายในแต่ละแอพลิเคชัน โปรแกรมประยุกต์ไม่ร่วมสถานะเซสชันเดียวกัน โปรแกรมประยุกต์รหัสเซสชันที่ใช้ร่วมกันเท่านั้น

ดังนั้น คุณสามารถที่นำมาใช้เซสชันที่รหัสหลายสาเหตุ ตัวอย่างเช่น ถ้าคุณนำมาใช้เซสชันรหัส คุณไม่จำเป็นต้องดำเนินการต่อไปนี้:
  • สร้างหมายเลขของเซสชันที่ไม่ซ้ำกัน cryptographically ใหม่เมื่อคุณนำเสนอ มีรหัสการเซสชันที่ถูกต้อง
  • สร้างการรหัสเซสชันใหม่สำหรับโปรแกรมประยุกต์ ASP.NET ทั้งหมดที่อยู่ในโดเมนเดียว
เมื่อโปรแกรมประยุกต์เว็บที่จำเป็นต้องเข้าสู่ระบบแบบ และล็อกออกจากหน้าหรือตัวเลือกการนำเสนอ เราขอแนะนำให้ คุณล้างข้อมูลสถานะเซสชันเมื่อมีการเข้าสู่ระบบผู้ใช้ออกจากเว็บไซต์ เมื่อต้องการล้างข้อมูลสถานะเซสชัน เรียกการSession.Abandonวิธีการ กระบวนการSession.Abandonวิธีการช่วยให้คุณสามารถล้างสถานะเซสชันโดยไม่ได้กำลังรอการหมดเวลาของสถานะเซสชัน โดยค่าเริ่มต้น การหมดเวลานี้จะหมดอายุการ sliding 20 นาที หมดอายุนี้กำลังฟื้นฟูทุกครั้งที่ผู้ใช้ทำการร้องขอให้ไปเว็บไซต์ และแสดงคุกกี้ ID ของเซสชัน กระบวนการabandonวิธีตั้งค่าสถานะในวัตถุสถานะเซสชันที่บ่งชี้ว่า ควรจะยกสถานะเซสชัน ค่าสถานะเป็น examined และจากนั้น ดำเนินส่วนท้ายของการร้องขอเพจ ดังนั้น ผู้ใช้สามารถใช้วัตถุของเซสชันภายในหน้าหลังจากที่คุณเรียกใช้การabandonวิธีการ ทันทีที่การประมวลผลเพเสร็จสมบูรณ์ เซสชันถูกลบออก

เมื่อคุณใช้โหมดสภาวะของเซสชันในกระบวนการ ออบเจ็กต์สถานะเซสชันเหล่านี้ถูกเก็บไว้ใน HttpCache The HttpCache supports a callback method when the following conditions are true:
  • A cache entry is removed.
  • The Session State Manager registers theSession_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 ) );
}

คุณสมบัติ

หมายเลขบทความ (Article ID): 899918 - รีวิวครั้งสุดท้าย: 15 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft .NET Framework 1.1
Keywords: 
kbinfo kbhowto kbmt KB899918 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ 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