เรามีปัญหากับเว็บไซต์ ASP.NET ที่เซสชันของผู้ใช้ทำงานผิดปกติ - ข้อมูลเซสชันปรากฏขึ้นหายไปและปรากฏขึ้นอีกครั้ง
ฉันคิดว่าฉันรู้ว่าปัญหาคืออะไร:
- การตั้งค่าของเราคือ 2 x โหลดบาลานซ์ WebServers + ฐานข้อมูลสถานะเซสชันเดียว
- ที่เก็บข้อมูลสถานะเซสชัน ASP.NET ASP.NET SQL ปรากฏขึ้นอยู่กับรหัสอินสแตนซ์ของเว็บไซต์ IIS (รหัส Metabase) เพื่อระบุรหัสคุกกี้เซสชันที่เข้ามาโดยไม่ซ้ำกันและเรียกคืน / เก็บค่า
- ID อินสแตนซ์ของเว็บไซต์ IIS ของเว็บไซต์นั้นแตกต่างกันในแต่ละเซิร์ฟเวอร์ที่ใช้งานจริง (ID / W3SVC / 1 / รูทบนเว็บเซิร์ฟเวอร์ A, ID / W3SVC / 2 / รูทบนเว็บเซิร์ฟเวอร์ B)
- โหลดบาลานซ์ไม่ได้ใช้ความสัมพันธ์กับลูกค้าดังนั้นคำขอ HTTP ของผู้ใช้แต่ละคนสามารถไปที่เซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่ง
ดังนั้นในขณะที่ผู้ใช้ล็อกเข้าสู่เว็บไซต์และย้ายไปรอบ ๆ การโทร HTTP แต่ละครั้งสามารถไปที่เว็บเซิร์ฟเวอร์และใช้ระเบียนสถานะเซสชันที่มี ID แตกต่างกันขึ้นอยู่กับเซิร์ฟเวอร์ ผู้ใช้จะมีอินสแตนซ์ของเซสชันแยกกัน 2 รายการพร้อมกัน ฉันเชื่อว่าฉันได้รับการตรวจสอบนี้เป็นฐานข้อมูลASPStateTempSessionsตารางแต่ละ ID เซสชันคุกกี้ดูเหมือนว่าจะตรงตามลักษณะที่ 2 ชื่อเกือบเหมือนบันทึก (รหัสของพวกเขาเท่านั้นที่แตกต่างกันโดยตัวละครไม่กี่สุดท้ายซึ่งผมเชื่อว่าเป็นตัวปรับแต่งบนพื้นฐานของAppIDจากตารางAspStateTempApplications ) สร้างขึ้นภายในไม่กี่วินาทีซึ่งกันและกัน
ดังนั้นสถานะเซสชันจะทำงานผิดปกติเนื่องจากการเปลี่ยนแปลงที่ทำกับบันทึกหนึ่งเซสชันจะยังคงอยู่กับเว็บเซิร์ฟเวอร์นั้นเท่านั้น หากผู้ใช้ย้ายไปยังเซิร์ฟเวอร์อื่นที่สมดุลโหลดค่าเซสชั่นจะดูเหมือนจะหายไปหรือย้อนกลับ
ฉันเชื่อว่าทางออกคือการซิงโครไนซ์ ID อินสแตนซ์ IIS ของไซต์ (เช่นทำให้ทั้งคู่/ W3SVC / 1 / รูท ) แต่ฉันพยายามแก้ไขค่านั้นใน IIS ภายใต้การตั้งค่าขั้นสูงและแม้ว่ามันจะบันทึกตกลงก็ตาม ไซต์ส่งคืน 404s บนเซิร์ฟเวอร์นั้นจนกว่าฉันจะเปลี่ยนกลับ
ฉันพบสคริปต์ VBSสำหรับปัญหานี้ แต่ดูเหมือนว่าจะเป็น IIS 6 เท่านั้นดังนั้นฉันจึงกังวลเกี่ยวกับการลองใช้ มีคนอื่นพบสถานการณ์นี้ใน IIS 7.5 แล้วและคุณจะแก้ไขได้อย่างไร
แก้ไข / แก้ไข
ความผิดพลาดของฉันคือฉันลืมรีสตาร์ท IIS หลังจากเปลี่ยน Site Instance ID ใน IIS หลังจากนี้ ID ถูกอัพเดตและเซสชัน ASP.NET ถูกซิงค์บนเว็บเซิร์ฟเวอร์สองเครื่อง
คำแนะนำแบบเต็ม:
- เดสก์ท็อประยะไกลไปยังเซิร์ฟเวอร์ LIVE1 เปิด IIS Mgr คลิกที่ไซต์ที่มีปัญหาและเลือกการตั้งค่าขั้นสูงในแถบด้านข้าง
- เปลี่ยน ID เป็นสิ่งที่ไม่ซ้ำกันเช่น 10. คลิกตกลง
- รีสตาร์ทเว็บเซอร์วิส (
c:\windows\system32\iisreset /restart
)
ทำเช่นเดียวกันสำหรับ LIVE2 (ตรวจสอบให้แน่ใจว่า ID ไซต์เหมือนกับใน LIVE1)
โปรดทราบว่า ID ไซต์จะมีผลกับตำแหน่งของไฟล์ไซต์เช่นโฟลเดอร์ไฟล์บันทึกC:\inetpub\logs\LogFiles\W3SVC10
เป็นต้น
ยังทราบว่าคุณสามารถทำการเปลี่ยนแปลงเหล่านี้ด้วยตนเองโดยการแก้ไขเว็บไซต์IDแอตทริบิวต์ใน IIS ไฟล์ config C:\Windows\System32\inetsrv\config\applicationHost.config
ในแต่ละเซิร์ฟเวอร์: ต้องใช้ privs ของผู้ดูแลระบบและยังคงต้องการการรีเซ็ตในภายหลัง