คำถาม: เหตุใดเซสชันจึงหายไปในเครื่องบางเครื่องเป็นครั้งคราว
คำตอบ: อาจเกี่ยวข้องกับสภาพแวดล้อมของเครื่อง เช่น ไฟร์วอลล์หรือซอฟต์แวร์ป้องกันไวรัส
ถาม: เหตุใดเมธอด Session_End จึงไม่เริ่มทำงานเมื่อมีการเรียก Session.Abandon
คำตอบ: ก่อนอื่นเลย เมธอด Session_End รองรับเฉพาะเซสชันประเภท InProc (ในกระบวนการ) เท่านั้น ประการที่สอง เพื่อเปิดใช้งานเมธอด Session_End ต้องมีเซสชันอยู่ (นั่นคือ มีการใช้เซสชันในระบบ) และต้องดำเนินการตามคำขออย่างน้อยหนึ่งรายการ (วิธีนี้จะถูกเรียกในคำขอนี้)
ถาม: เหตุใดเซสชันของฉันจึงมักจะหายไปเมื่อฉันใช้งานในโหมด InProc
คำตอบ: ปัญหานี้มักเกิดจากการที่แอปพลิเคชันถูกรีไซเคิล เนื่องจากเมื่อใช้เซสชันที่อยู่ระหว่างดำเนินการ เซสชันจะถูกบันทึกในกระบวนการ aspnet_wp เมื่อกระบวนการถูกรีไซเคิล เซสชันจะหายไปตามธรรมชาติเพื่อตรวจสอบว่ากระบวนการนั้นมีหรือไม่ รีไซเคิลแล้ว คุณสามารถใช้ Check Event Viewer ของระบบของคุณเพื่อดูข้อมูลได้
สำหรับข้อมูลเฉพาะ โปรดดูที่:
ตัวแปรเซสชันจะหายไปเป็นระยะๆ ในแอปพลิเคชัน ASP.NET
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316148
นอกจากนี้ยังมีจุดบกพร่องใน 1.0 ที่ทำให้กระบวนการของผู้ปฏิบัติงานถูกรีไซเคิลและเริ่มต้นใหม่อีกครั้ง จุดบกพร่องนี้ได้รับการแก้ไขแล้วใน 1.1 และ sp2
สำหรับข้อมูลโดยละเอียดเกี่ยวกับจุดบกพร่องนี้ โปรดดูที่:
กระบวนการของผู้ปฏิบัติงาน ASP.NET (Aspnet_wp.exe) ถูกรีไซเคิลโดยไม่คาดคิด
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q321792
คำถาม: เหตุใด ID ของเซสชันใหม่จึงเหมือนกับเซสชันเดิมหลังจากเซสชันหมดเวลาหรือถูกละทิ้ง
คำตอบ: เนื่องจาก SessionID ถูกบันทึกไว้ในอินสแตนซ์ของเบราว์เซอร์ไคลเอนต์ เมื่อเซสชันหมดเวลาและมีการสร้างเซสชันใหม่บนเซิร์ฟเวอร์ รหัสเซสชันที่ส่งผ่านโดยเบราว์เซอร์จะถูกใช้ ดังนั้น หลังจากหมดเวลาเซสชัน รหัสเซสชันจะไม่เปลี่ยนแปลงหลังจากสร้างใหม่แล้ว
ถาม: เหตุใด SessionID จึงแตกต่างกันในแต่ละคำขอ
คำตอบ : ปัญหานี้อาจเกิดจากการไม่บันทึกข้อมูลใดๆ ไว้ใน Session กล่าวคือ ไม่มีการใช้งาน Session ใดๆ ในโปรแกรม หลังจากที่ข้อมูลถูกบันทึกในเซสชันแล้ว SessionID จะเกี่ยวข้องกับเบราว์เซอร์เสมอ และ SessionID จะไม่เปลี่ยนแปลงในขณะนี้
ถาม: สามารถแชร์เซสชันระหว่าง ASP และ ASP.NET ได้หรือไม่
คำตอบ: ใช่ แต่นี่เป็นกระบวนการที่ค่อนข้างซับซ้อน Microsoft มีวิธีแก้ปัญหาอย่างเป็นทางการ โปรดดูที่: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ConvertToASPNET .aspQ
: ออบเจ็กต์ประเภทใดที่สามารถบันทึกใน Session ได้
คำตอบ: ขึ้นอยู่กับโหมดเซสชันที่ใช้ เมื่อใช้เซสชันที่อยู่ระหว่างดำเนินการ (InProc) วัตถุใดๆ ก็สามารถบันทึกได้อย่างง่ายดาย หากคุณใช้โหมดที่ไม่ใช่ InProc คุณสามารถบันทึกได้เฉพาะออบเจ็กต์ที่สามารถซีเรียลไลซ์และดีซีเรียลไลซ์ได้เท่านั้น หากออบเจ็กต์ที่บันทึกในขณะนี้ไม่รองรับการทำให้เป็นอนุกรม ก็จะไม่สามารถบันทึกในเซสชันของโหมดนี้ได้ (ไม่ใช่ InProc)
ถาม: เหตุใดฉันจึงใช้วิธี Response.Redirect และ Server.Transfer ใน Session_End เพื่อข้ามไปยังหน้าไม่ได้
คำตอบ: Session_End เป็นฟังก์ชันการประมวลผลเหตุการณ์ที่ทำงานภายในเซิร์ฟเวอร์ ขึ้นอยู่กับตัวจับเวลาภายในเซิร์ฟเวอร์ เมื่อเหตุการณ์เริ่มทำงาน ไม่มีวัตถุ HttpRequest ที่เกี่ยวข้องบนเซิร์ฟเวอร์ ดังนั้นจึงไม่สามารถใช้วิธี Response.Redirect และ Server.Transfer ได้ในขณะนี้
ถาม: ฉันสามารถรับวัตถุ HttpContext ใน Session_End ได้หรือไม่
คำตอบ: ไม่ เนื่องจากเหตุการณ์นี้ไม่เกี่ยวข้องกับคำขอใดๆ (คำขอ) และไม่มีบริบทตามคำขอ
คำถาม: จะใช้ Session ใน Web Service ได้อย่างไร?
คำตอบ: ในการใช้เซสชันในบริการเว็บ ผู้เรียกบริการเว็บจำเป็นต้องทำงานเพิ่มเติม และคุกกี้ที่ใช้ในการเรียกบริการเว็บจะต้องถูกบันทึกและจัดเก็บ สำหรับรายละเอียด โปรดดูเอกสารประกอบ MSDN สำหรับคุณสมบัติ HttpWebClientProtocol.CookieContainer อย่างไรก็ตาม หากคุณใช้พร็อกซีเซิร์ฟเวอร์เพื่อเข้าถึงบริการเว็บเนื่องจากข้อจำกัดของเฟรมเวิร์ก ทั้งสองจะไม่สามารถแชร์เซสชันได้
คำถาม: เหตุใดฉันจึงใช้เซสชันไม่ได้เมื่อปรับแต่ง HttpHandler ของตัวเอง
คำตอบ: เมื่อใช้งาน HttpHandler ของคุณเอง หากคุณต้องการใช้ Session คุณต้องใช้อินเทอร์เฟซแบบใดแบบหนึ่งต่อไปนี้: IRquiresSessionState และ IReadOnlySessionState วิธีการใช้อินเทอร์เฟซ INamingContainer
ถาม: เมื่อฉันใช้ webfarm เหตุใดเซสชันจึงหายไปเมื่อฉันเปลี่ยนเส้นทางไปยังเว็บเซิร์ฟเวอร์อื่น
คำตอบ: สำหรับข้อมูลโดยละเอียด โปรดดูที่:
PRB: สถานะเซสชันหายไปใน Web Farm ถ้าคุณใช้โหมดเซสชัน SqlServer หรือ StateServer
http://support.microsoft.com/default.aspx?scid=kb;en-us;325056Q
: เหตุใดเซสชันของฉันจึงไม่ถูกต้องในเมธอด Application_OnAcquireRequestState
คำตอบ: เซสชันจะใช้งานได้หลังจากเรียกเหตุการณ์ HttpApplication.AcquireRequestState เท่านั้น
สำหรับข้อมูลโดยละเอียด โปรดดูที่:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconhandlingpublicevents.asp
ถาม: ฉันจะเปลี่ยนเส้นทางจากหน้า HTTP ไปยัง HTTPS ได้อย่างไร หากใช้คุกกี้แบบไม่มีคุกกี้
คำตอบ: โปรดลองวิธีการต่อไปนี้:
สตริง originalUrl = "/fxtest3/sub/foo2.aspx";
สตริง modifiedUrl = " https://localhost " + Response.ApplyAppPathModifier(OriginalUrl);
Response.Redirect(modifiedUrl);
ถาม: เซสชันถูกต้องในเหตุการณ์เหล่านั้นใน global.asax?
คำตอบ: เซสชันจะใช้ได้หลังจากเหตุการณ์ AcquireRequestState เท่านั้น และกิจกรรมหลังจากเหตุการณ์นี้สามารถใช้เซสชันได้
ถาม: จะบันทึกออบเจ็กต์ทั้งหมดในเซสชันปัจจุบันได้อย่างไร
คำตอบ: สามารถรับได้โดยการสำรวจ Session.Keys ทั้งหมด รหัสมีดังนี้:
ArrayList sessionCollection = ใหม่ ArrayList();
foreach (สตริง strKey ใน Session.Keys){
sessionCollection.Add(เซสชั่น[strKey]);
-
ถาม: เป็นไปได้ไหมที่จะแชร์เซสชันในแอปพลิเคชันต่างๆ
คำตอบ: ไม่สามารถแชร์ได้โดยตรง คุณสามารถดูวิธีการแชร์เซสชันระหว่าง ASP และ ASP.NET
ถาม: Session.Abandon และ Session.Clear แตกต่างกันอย่างไร
คำตอบ: ข้อแตกต่างที่สำคัญคือเมื่อใช้ Session.Abandon จะเรียกใช้เมธอด Session_End (ในโหมด InProc) เมธอด Session_Start จะเริ่มทำงานเมื่อมีการร้องขอครั้งต่อไป Session.Clear จะล้างข้อมูลทั้งหมดในเซสชันเท่านั้นและไม่ได้ยุติเซสชัน ดังนั้นวิธีการเหล่านั้นจะไม่ถูกเรียก
คำถาม: ในการเข้าถึงค่าสถานะของ Session ตามลำดับ Session จะมีกลไกการล็อคหรือไม่?
คำตอบ: เซสชันใช้กลไกการล็อค Reader/Writer:
เมื่อเพจมีความสามารถในการเขียนสำหรับเซสชัน (นั่นคือ เพจมีแท็ก <%@ Page EnableSessionState="True" %>) เซสชันของเพจจะคงล็อกการเขียนไว้จนกว่าคำขอจะเสร็จสมบูรณ์
เมื่อเพจมีฟังก์ชันอ่านอย่างเดียวสำหรับเซสชัน (นั่นคือ เพจมีแท็ก <%@ Page EnableSessionState="ReadOnly" %>) เซสชันที่ร้องขอให้เพจเสร็จสมบูรณ์จะล็อคการอ่านเอาไว้
ล็อคการอ่านจะบล็อกล็อคการเขียน; ล็อคการอ่านจะไม่ปิดกั้นล็อคการอ่าน; ล็อคการเขียนจะบล็อกล็อคการอ่านและการเขียนทั้งหมด นี่คือเหตุผลว่าทำไมเมื่อหน้าเดียวกันในสองเฟรมเขียนไปยังเซสชันเดียวกัน หนึ่งในนั้นต้องรอให้อีกเฟรมหนึ่ง (เร็วกว่าเล็กน้อย) ให้เสร็จก่อนที่จะเริ่มเขียน
ถาม: การหมดเวลาของเซสชันที่ราบรื่นหมายถึงอะไร
คำตอบ: การหมดเวลาของเซสชันที่ราบรื่นหมายความว่าตราบใดที่เพจของคุณเข้าถึง (ใช้) เซสชัน การหมดเวลานั้นจะถูกรีเฟรช (อาจเข้าใจว่าเป็นการกำหนดเวลาใหม่) นั่นคือ การหมดเวลาจะถูกคำนวณใหม่โดยเริ่มจากคำขอเพจ อย่างไรก็ตาม เพจไม่สามารถปิดใช้งานเซสชันได้ มันจะเข้าถึงเซสชันของหน้าปัจจุบันโดยอัตโนมัติและรีเฟรชการหมดเวลา
คำถาม: เหตุใดเซสชันจึงไม่ถูกต้องในฟังก์ชันการจัดการเหตุการณ์ใน global.asax
คำตอบ: ขึ้นอยู่กับฟังก์ชันการจัดการเหตุการณ์ที่ใช้เซสชัน เซสชันจะใช้งานได้หลังจากเหตุการณ์ AcquireRequestState เท่านั้น ฟังก์ชันการจัดการเหตุการณ์ทั้งหมดหลังจากเหตุการณ์นี้สามารถใช้เซสชันได้ แต่ไม่ใช่ฟังก์ชันที่อยู่ก่อนหน้า
คำถาม: เมื่อฉันเขียนส่วนประกอบที่ขึ้นอยู่กับเซสชันของแอปพลิเคชันปัจจุบัน เหตุใดฉันจึงไม่สามารถใช้ Session["Key"] เพื่อรับค่าโดยตรงได้
คำตอบ: จริงๆ แล้ว Session["Key"] ก็คือสิ่งนี้ Session["Key"] ซึ่งจัดไว้ให้เป็นคุณสมบัติของ Page ดังนั้นคุณจึงไม่สามารถใช้คุณสมบัตินี้ในส่วนประกอบของคุณได้โดยตรง คุณสามารถใช้เซสชันได้ด้วยวิธีต่อไปนี้:
HttpContext.Current.Session["Key"] = "My Seesion Value";
ถาม: เมื่อฉันใช้โหมด InProc เพื่อบันทึกเซสชัน เซสชันจะถูกบันทึกไว้ที่ใดในเวลานี้
คำตอบ: IIS ที่แตกต่างกันมีวิธีการประมวลผลที่แตกต่างกัน
เมื่อใช้ IIS5 เซสชันจะถูกบันทึกในพื้นที่กระบวนการของ aspnet_wp.exe
เมื่อใช้ IIS6 แอปพลิเคชันทั้งหมดจะแชร์กลุ่มแอปพลิเคชันตามค่าเริ่มต้น และเซสชันจะถูกบันทึกในพื้นที่กระบวนการของ w3wp.exe
ถาม: การหมดเวลาเซสชันตั้งค่าเป็นนาทีหรือวินาทีหรือไม่
คำตอบ: คือนาที ค่าเริ่มต้นคือ 20 นาที
ถาม: เซสชันของฉันจะถูกบันทึกไว้เมื่อมีข้อผิดพลาดเกิดขึ้นบนเพจหรือไม่ ฉันต้องจัดการกับการล้างข้อมูลใน Session_End แต่มันล้มเหลว เพราะเหตุใด
คำตอบ: Session_End จะถูกดำเนินการเมื่อเซสชันทำงานในโหมด InProc เท่านั้น บัญชีที่ใช้โดย Session_End คือบัญชีที่ใช้กระบวนการของผู้ปฏิบัติงาน aspnet_wp (สามารถตั้งค่าได้ใน machine.config) ดังนั้น หากคุณใช้การรักษาความปลอดภัยแบบรวมเพื่อเชื่อมต่อกับ SQL ในเมธอด Session_End ลิงก์จะเปิดขึ้นโดยใช้บัญชีของกระบวนการ aspnet_wp และความสำเร็จหรือความล้มเหลวในเวลานี้จะขึ้นอยู่กับการตั้งค่าความปลอดภัยของ SQL ของคุณ
คำถาม: เหตุใดฉันจึงสูญเสียเซสชันเมื่อฉันเปลี่ยนเส้นทางเมื่อฉันตั้งค่าไม่มีคุกกี้เป็นจริง
คำตอบ: เมื่อใช้ Cookieless คุณต้องใช้เส้นทางสัมพัทธ์เพื่อแทนที่เส้นทางที่แน่นอนในโปรแกรม หากคุณใช้เส้นทางที่แน่นอน ASP.NET จะไม่สามารถบันทึก SessionID ใน URL ได้
ตัวอย่างเช่น: แทนที่ myDirmySubdirdefault.aspx ด้วย ..default.aspx
คำถาม: จะจัดเก็บ SortedList ในเซสชันหรือแคชได้อย่างไร
คำตอบ: โปรดดูวิธีการต่อไปนี้:
SortedList x = ใหม่ SortedList();
x.Add("Key1", "ValueA");
x.Add("Key2", "ValueB");
บันทึกไปที่เซสชั่น:
เซสชัน["SortedList1"] = x;
ใช้วิธีการต่อไปนี้เพื่อรับ:
SortedList y = (SortedList) เซสชัน ["SortedList1"];
เช่นเดียวกับ Chahe
ถาม: เหตุใดฉันจึงได้รับข้อความแสดงข้อผิดพลาด "สถานะเซสชันสามารถใช้ได้เฉพาะเมื่อตั้งค่า EnableSessionState เป็นจริง ทั้งในไฟล์การกำหนดค่าหรือในคำสั่งของเพจ"
คำตอบ: ปัญหานี้อาจเกิดขึ้นหลังจากติดตั้ง Window Sharepoint Server (WSS) บนเครื่องที่ติดตั้งสภาพแวดล้อมการพัฒนา Microsoft Visual Studio .NET
ตัวกรอง WSS ISAPI จะจัดการคำขอทั้งหมด เมื่อคุณเรียกดูแอปพลิเคชัน ASP.NET ผ่านไดเรกทอรีเสมือน ตัวกรอง ISAPI ไม่ได้กำหนด URL ให้กับไดเรกทอรีของโฟลเดอร์
วิธีแก้ไขคือ: ห้ามใช้เซสชันบนเครื่องที่ติดตั้ง WSS
สำหรับข้อมูลโดยละเอียด โปรดดูที่:
ไม่สามารถใช้สถานะเซสชันใน ASP.NET กับ Windows SharePoint Services
http://support.microsoft.com/default.aspx?scid=kb;en-us;837376Q
: จะลบตัวแปรเซสชันได้อย่างไร
คำตอบ: หากคุณต้องการลบตัวแปร Session คุณสามารถใช้เมธอด HttpSessionState.Remove() ได้
ถาม: มีวิธีทราบจำนวนหน่วยความจำที่เซสชันของแอปพลิเคชันใช้ในขณะที่ทำงานอยู่หรือไม่
คำตอบ: ไม่. ปัจจุบันยังไม่สามารถยืนยันค่านี้ได้ อย่างน้อยก็ยังไม่เห็นข้อมูลใดๆ เกี่ยวกับเรื่องนี้ อย่างไรก็ตาม สามารถประมาณค่าโดยประมาณได้ผ่านทางตัวตรวจสอบประสิทธิภาพและโค้ดโปรแกรม
คำถาม: เมื่อมีเฟรมเซตในเพจจะพบว่า SessionID ของเพจที่แสดงในแต่ละเฟรมแตกต่างกันในคำขอแรก
คำตอบ: เหตุผลก็คือ frameset ของคุณถูกวางไว้บนหน้า html แทนที่จะเป็นหน้า ASPX
ภายใต้สถานการณ์ปกติ หากเฟรมเซตเป็นเพจ aspx เมื่อคุณร้องขอเพจ เพจนั้นจะส่งคำขอไปยังเว็บเซิร์ฟเวอร์ก่อน และได้รับ SessionID แล้ว จากนั้นเบราว์เซอร์จะร้องขอเพจอื่นๆ ใน Frame ตามลำดับ เพื่อให้ SessionID ของเพจทั้งหมด เหมือนกัน คือ SessionID ของเพจ FrameSet
อย่างไรก็ตาม หากคุณใช้เพจ Html เพื่อสร้างเพจ FrameSet คำขอแรกจะเป็นเพจ HTML เมื่อเพจถูกส่งคืนจากเซิร์ฟเวอร์ จะไม่มีการสร้างเซสชัน จากนั้นเบราว์เซอร์จะขอเพจใน Frame ดังนั้นสิ่งเหล่านี้ เพจต่างๆ จะสร้าง SessionID ของตัวเอง ดังนั้นในกรณีนี้ปัญหานี้จึงเกิดขึ้น เมื่อคุณรีเฟรชเพจ SessionID จะเหมือนเดิม และจะเป็น SessionID ของเพจที่ร้องขอล่าสุด
ถาม: เป็นไปได้หรือไม่ที่จะบันทึกเซสชันของแอปพลิเคชันที่แตกต่างกันบนฐานข้อมูลที่แตกต่างกันบนเซิร์ฟเวอร์ SQL Server เดียวกัน
คำตอบ: ใช่ โปรดดูที่:
การแก้ไข: การใช้ฐานข้อมูล SQL หนึ่งฐานข้อมูลสำหรับแอปพลิเคชันทั้งหมดสำหรับสถานะเซสชันของ SQL Server อาจทำให้เกิดคอขวด
http://support.microsoft.com/default.aspx?scid=kb;en-us;836680Q
: ฉันสามารถรับวัตถุ HttpSessionState และ HttpContext ที่ถูกต้องใน Session_End ได้หรือไม่
คำตอบ: คุณสามารถรับออบเจ็กต์ HttpSessionState ในวิธีนี้ และคุณสามารถเข้าถึงได้โดยตรงโดยใช้เซสชัน อย่างไรก็ตาม ไม่สามารถรับวัตถุ HttpContext ได้เนื่องจากเหตุการณ์ไม่เกี่ยวข้องกับคำขอใดๆ ดังนั้นจึงไม่มีวัตถุบริบท
ถาม: เมื่อใช้เซสชันในโหมด SQL Server เหตุใดเซสชันของฉันจึงไม่หมดอายุ
คำตอบ: ในโหมด SqlServer การหมดอายุของเซสชันจะเสร็จสมบูรณ์ผ่านการลงทะเบียน SQL Agent โปรดตรวจสอบว่า SQL Agent ของคุณกำลังทำงานอยู่หรือไม่
ถาม: หลังจากที่ฉันตั้งค่า EnableSessionState เป็น "ReadOnly" แล้ว ฉันยังสามารถแก้ไขค่าเซสชันในโหมด InProc ได้
คำตอบ: แม้ว่า EnableSessionState จะถูกทำเครื่องหมายว่าอ่านอย่างเดียว ผู้ใช้ยังคงสามารถแก้ไขเซสชันในโหมด InProc ได้ ข้อแตกต่างเพียงอย่างเดียวคือเซสชันจะไม่ถูกล็อคในระหว่างการร้องขอ
ถาม: ฉันจะหลีกเลี่ยงการระบุรหัสผ่านเมื่อลิงก์ SQL ได้อย่างไร
คำตอบ: ใช้ลิงก์ที่เชื่อถือได้หรือใช้สตริงลิงก์ที่เข้ารหัส สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ โปรดดูที่:
วิธีการใช้ยูทิลิตี้ ASP.NET เพื่อเข้ารหัสข้อมูลประจำตัวและสตริงการเชื่อมต่อสถานะเซสชัน
http://support.microsoft.com/default.aspx?scid=kb;en-us;329290Q
: ฉันควรใช้ Session ในชั้นเรียนของตัวเองอย่างไร
คำตอบ: คุณสามารถใช้ HttpContext.Current.Session ได้ โดยมีวิธีการเฉพาะดังนี้
HttpContext.Current.Session["SessionKey"] = "SessionValue";
ในทำนองเดียวกัน คุณสามารถใช้ออบเจ็กต์ Application ในลักษณะนี้ได้
ถาม: เหตุใดคำขอของฉันจึงหยุดทำงานหลังจากสลับไปยังโหมด SQL Server
คำตอบ: ตรวจสอบว่าออบเจ็กต์ทั้งหมดที่บันทึกไว้ในเซสชันสามารถบันทึกในโหมด SQL Server ได้หรือไม่ กล่าวคือ ออบเจ็กต์เหล่านี้ต้องรองรับการทำให้เป็นอนุกรม
คำถาม: จะมีผลกระทบอย่างไรเมื่อตั้งค่าเซสชันเป็นแบบไม่มีคุกกี้
คำตอบ: เมื่อตั้งค่า Cookieless เป็นจริง มีข้อจำกัดหลักๆ ดังต่อไปนี้:
1. ไม่สามารถใช้ลิงก์สัมบูรณ์ในหน้าเพจได้
2. นอกเหนือจากการสลับระหว่าง HTTP และ HTTPS แล้ว ขั้นตอนอื่นๆ บางอย่างยังจำเป็นต้องทำให้เสร็จสิ้นในแอปพลิเคชันอีกด้วย
หากคุณส่งลิงก์ไปยังบุคคลอื่น URL ในขณะนี้จะมีข้อมูลรหัสเซสชัน ดังนั้นทั้งสองคนจะแชร์เซสชัน
ถาม: สามารถบันทึก Session ลงฐานข้อมูลได้หรือไม่
คำตอบ: แน่นอน สำหรับรายละเอียด โปรดดูที่: http://support.microsoft.com/default.aspx?scid=kb;en-us;311209
--------------- -------------------------------------------------- -------------------------------------------------- --- -
ถาม: เหตุใดเซสชันของฉันจึงมักจะหายไปเมื่อฉันใช้งานในโหมด InProc
สถานการณ์เพิ่มเติม: หากคุณใช้ฐานข้อมูล Access เพื่อป้องกันไม่ให้ดาวน์โหลดฐานข้อมูล บางคนอาจคิดที่จะวางไฟล์ฐานข้อมูลไว้ในไดเร็กทอรี bin เพื่อไม่ให้ดาวน์โหลดฐานข้อมูลได้ อย่างไรก็ตาม หากอยู่ในโหมด InProc ซึ่งจะทำให้เซสชันหายไปด้วย เนื่องจากเมื่อเข้าถึงแอปพลิเคชัน ข้อมูลจะถูกเขียนลงฐานข้อมูลบ่อยครั้ง ซึ่งจะนำไปสู่การเปลี่ยนแปลงในไฟล์ฐานข้อมูลที่อยู่ใต้ไดเร็กทอรี bin และการแก้ไขไดเร็กทอรี bin จะทำให้เซสชันสูญหาย
เมื่อต้องการแก้ไขปัญหานี้ คุณสามารถเปลี่ยนเส้นทางการจัดเก็บของไฟล์ฐานข้อมูล หรือใช้โหมด StateServer หรือ SqlServer
สำหรับข้อมูลเพิ่มเติม โปรดดูที่:
PRB: ข้อมูลเซสชันจะหายไปเมื่อคุณใช้โหมดสถานะเซสชัน ASP.NET InProc
http://support.microsoft.com/default.aspx?scid=kb;en-us;324772
-------------------------------------------------- -------------------------------------------------- -----------------------
เซสชันที่ใช้ร่วมกันหลายโครงการใน Asp.net เลือกจากบล็อกของ dnyz
http://dev.csdn.net/article/21/21714.shtm
1. สร้างโซลูชันเปล่า โซลูชันเปล่า เช่น: d:MyProjectMyProject.sln
2. สร้างไดเรกทอรีรากของแอปพลิเคชันเว็บ d:MyProjectWebMis ภายใต้ d:MyProject และตั้งค่าเป็นไดเรกทอรีเสมือนของ http://localhost/WebMis
3. สร้างไดเร็กทอรีใหม่ตามโมดูลในไดเร็กทอรี WebMis เช่น: d:MyProjectWebMisLogin และ d:MyProjectWebMisCheckOut
4. สร้างเว็บแอปพลิเคชันใหม่โดยใช้โมดูลใน VS.net เช่น: http://localhost/WebMis/Login และ http://localhost/WebMis/CheckOut
5. หลังจากสร้างแล้ว ไดเร็กทอรี Login และ CheckOut จะถูกตั้งค่าเป็นไดเร็กทอรีเสมือนโดยอัตโนมัติ
6. เพิ่มการอ้างอิงโครงการสำหรับการเข้าสู่ระบบและการชำระเงินในโครงการ WebMis
7. ลบไดเรกทอรีเสมือนของการเข้าสู่ระบบและการชำระเงินใน IIS Manager
8. ลบ global.asax ของแต่ละโครงการ (ลบโครงการราก)
9. ลบรหัสต่อไปนี้ใน web.config ของโครงการ (ลบโครงการหลัก):
<โหมดการรับรองความถูกต้อง = "Windows" />
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="แหล่งข้อมูล=127.0.0.1;Trusted_Connection=yes" cookieless="false" หมดเวลา = "20" />
หรือลบ web.config (หากคุณไม่จำเป็นต้องกำหนดค่าในแต่ละไดเร็กทอรี)
10.หลังจากคอมไพล์แล้วก็สามารถรันได้