http://www.narisa.com/forums/index.php?showtopic=27585
อ ผมแปลกใจว่า ทำไม Session ผม มันถึงหายบ่อยจริง
ผมเรียกหน้าแบบนี้นะครับ
Default.aspx
..... etc
ทุกอย่างในนี้ไม่มีปัญหาเรื่อง session หายเลยครับ
แต่พอผมเรียกจาก Default.aspx ไปยัง...
admin/admin.aspx
ตอนนี้ยังปกติอยู่ครับ แต่จาก admin/admin.aspx ผมได้ใช้ Response.Redirect เรียกไปยัง...
admin/admin.aspx?do=std
ตัว session ผมหายเฉยเลย หายตลอดเลยอ่ะครับ
ไม่ทราบว่าเป็นเพราะอะไรเหรอครับ ทั้งี่ผมก็ตั้ง Timeout ไว้ที่ 30 แล้วอ่ะ - -"
Edited by natthavat28, 17 April 2009 - 01:11 AM.
#2 Rux
Principle Member
Star
1136 posts
Posted 11 April 2009 - 03:54 AM
ปัญหา session lost เร็วผิดปกติ ผมเคยลองค้น google ดูเหมือนกันครับ ถ้าเราแน่ใจว่าไม่มี code ของเราที่สั่งทำลาย session ซะเอง ก็ให้ลองตรวจสอบโปรแกรม antivirus ดูนะครับ หากมีติดตั้งอยู่ให้ปิดการทำงานหรือ uninstall ออกเสียก่อน แล้วทดสอบดูอีกครั้ง
ปกติ session lost ได้นั้นนอกจากเราเขียน code สั่ง หรือ timeout แล้ว หาก .Net Framework มัน restart เว็บแอพลิเคชันของเราก็เป็นสาเหตุที่ session lost ได้เช่นกัน แล้วมันจะ restart ในกรณีไหนได้บ้าง ก็คือกรณีที่สถานะของไฟล์ Global.asax Web.config หรือ Machine.config เป็น modified หรือถูกแ้ก้ไขนั่นแหล่ะครับ แล้วใครหล่ะที่จะไปทำ....ก็เจ้า antivirus นั่นไงครับ มันมักจะ scan ไฟล์ต่างๆ ในระบบแบบ background ไปเรื่อยๆ และ mark ไหล์นั้นเป็น modified เสียด้วย นี่จึงเป็นสาเหตุหนึ่งที่ทำให้ session lost
คุณ natthavat28 ลองตรวจสอบดูนะครับ หากได้ความยังไงรบกวนมาเล่าให้ฟังบ้างนะครับ ที่หาข้อมูลเรื่องนี้เพราะมีรุ่นน้องมาถาม ส่วนตัวผมเองยังไม่เคยเจอเหมือนกันครับ
#3 natthavat28
Member
MSP
PipPip
414 posts
Posted 11 April 2009 - 04:18 PM
View PostRux, on Apr 11 2009, 03:54 AM, said:
ปัญหา session lost เร็วผิดปกติ ผมเคยลองค้น google ดูเหมือนกันครับ ถ้าเราแน่ใจว่าไม่มี code ของเราที่สั่งทำลาย session ซะเอง ก็ให้ลองตรวจสอบโปรแกรม antivirus ดูนะครับ หากมีติดตั้งอยู่ให้ปิดการทำงานหรือ uninstall ออกเสียก่อน แล้วทดสอบดูอีกครั้ง
ปกติ session lost ได้นั้นนอกจากเราเขียน code สั่ง หรือ timeout แล้ว หาก .Net Framework มัน restart เว็บแอพลิเคชันของเราก็เป็นสาเหตุที่ session lost ได้เช่นกัน แล้วมันจะ restart ในกรณีไหนได้บ้าง ก็คือกรณีที่สถานะของไฟล์ Global.asax Web.config หรือ Machine.config เป็น modified หรือถูกแ้ก้ไขนั่นแหล่ะครับ แล้วใครหล่ะที่จะไปทำ....ก็เจ้า antivirus นั่นไงครับ มันมักจะ scan ไฟล์ต่างๆ ในระบบแบบ background ไปเรื่อยๆ และ mark ไหล์นั้นเป็น modified เสียด้วย นี่จึงเป็นสาเหตุหนึ่งที่ทำให้ session lost
คุณ natthavat28 ลองตรวจสอบดูนะครับ หากได้ความยังไงรบกวนมาเล่าให้ฟังบ้างนะครับ ที่หาข้อมูลเรื่องนี้เพราะมีรุ่นน้องมาถาม ส่วนตัวผมเองยังไม่เคยเจอเหมือนกันครับ
ตัว Global.asax Web.config หรือ Machine.config ผมว่าผมตัดทิ้งได้เลยอ่ะครับ เพราะผมไม่ได้แก้อะไรมันเลย - -"
ทีนี้ตัวคำสั่งทำลาย Session ตัวนี้ผมก็สั่งแค่หน้าๆเดียวซะด้วย - -"
ทีนี้มามองเรื่อง Antivirus ผมว่ามันไม่ใช่แล้วอ่ะครับ เพราะผมทดสอบรันมา 3-4 เครื่องแล้ว เป็นเหมือนกันหมดที่จุดๆเดียวกันด้วยครับ
ไม่แน่ว่าอาจจะผิดที่ Code ผมก็เป็นได้ แต่ผมก็แปลกใจอยู่ดีว่า อีกหน้านึง ก็มีทำคล้ายๆแบบนี้ แต่กลับไม่เป็นอะไรเลย ผมเลยข้องใจอ่ะครับ - -"
#4 OdaNobunaka
Newbie
Members
Pip
10 posts
Posted 12 April 2009 - 10:25 PM
เป็นตอน Develop หรือ Deploy ขึ้น Server แล้วครับ ถ้าเป็นตอน Deploy แล้วให้ตรวจสอบที่ IIS ครับว่า config application pool ไว้อย่างไร แต่ถ้าเป็นตอน Develop แล้วคุณใช้ VS2005 หรือ VS2008 พัฒนาเว็ปแบบ File System ตรงนี้ session หายอาจเป็นที่ Code คุณแนะนำให้ Debug แล้วใช้ Watch เช็คตั้งแต่ Init page เลยครับ แต่ถ้ามั่นใจว่าไม่มีการ config หรือ coding อะไรที่ทำให้ session ถูกทำลาย ผมเดาว่า environment น่าจะมีปัญหาอะไรผิดปกตินะครับ
#5 natthavat28
Member
MSP
PipPip
414 posts
Posted 13 April 2009 - 06:19 PM
หลังจากที่ผมนั่งลองหาจุดที่ Session Lost ดู ผลคือ เป็นตามนี้ครับ
พอผม Edit ข้อมูล และกดเซฟ เพื่อ ให้ระบบ บันทึกข้อมูล แก้โน่แก้นี่ ตามที่ผมเขียนไว้ และ Reload ขึ้มูลขึ้นมาใหม่
จังหวะนั้นมันยังไม่ lost ครับ แต่พอผมกด edit มันอีกรอบ หลังจากที่มัน reload step มันจะตามนี้ใช่มะครับ
- กดปุ่ม
- postback
- เข้า event page_load
- บลาๆๆๆๆๆ
ทีนี้ที่ผมเขียนไว้คือ
- กดปุ่ม
- postback
- เข้า event page_load
- เช็ค Session = null หรือไม่ ?
- renew session ใหม่ โดยการ remove ของเก่าออกและ add ใหม่
ผลที่ได้เมื่อผมกดปุ่ม edit รอบสองคือ... มันวิ่งถึงตอน เช็ค session ครับ ได้ผลเป็น null เลย
ทั้งที่ก่อนมาถึงหน้านี้ผมไม่ได้สั่ง destroy หรือ remove อะไรเลยนะครับ เวลาก็ยังไม่ถึงด้วย
ไม่ทราบว่ามันเกิดจากอะไรอ่ะครับ ผมเทสเครื่องที่มี IIS 3 เครื่องแล้ว ผลเหมือนกันเลยครับ
#6 nuboat
Star
Star
2009 posts
Posted 13 April 2009 - 06:27 PM
View Postnatthavat28, on Apr 13 2009, 06:19 PM, said:
หลังจากที่ผมนั่งลองหาจุดที่ Session Lost ดู ผลคือ เป็นตามนี้ครับ
พอผม Edit ข้อมูล และกดเซฟ เพื่อ ให้ระบบ บันทึกข้อมูล แก้โน่แก้นี่ ตามที่ผมเขียนไว้ และ Reload ขึ้มูลขึ้นมาใหม่
จังหวะนั้นมันยังไม่ lost ครับ แต่พอผมกด edit มันอีกรอบ หลังจากที่มัน reload step มันจะตามนี้ใช่มะครับ
- กดปุ่ม
- postback
- เข้า event page_load
- บลาๆๆๆๆๆ
ทีนี้ที่ผมเขียนไว้คือ
- กดปุ่ม
- postback
- เข้า event page_load
- เช็ค Session = null หรือไม่ ?
- renew session ใหม่ โดยการ remove ของเก่าออกและ add ใหม่
ผลที่ได้เมื่อผมกดปุ่ม edit รอบสองคือ... มันวิ่งถึงตอน เช็ค session ครับ ได้ผลเป็น null เลย
ทั้งที่ก่อนมาถึงหน้านี้ผมไม่ได้สั่ง destroy หรือ remove อะไรเลยนะครับ เวลาก็ยังไม่ถึงด้วย
ไม่ทราบว่ามันเกิดจากอะไรอ่ะครับ ผมเทสเครื่องที่มี IIS 3 เครื่องแล้ว ผลเหมือนกันเลยครับ
Session = null or Session == null กันแน่ครับ ?
สงสัยนิดๆและ
#7 natthavat28
Member
MSP
PipPip
414 posts
Posted 14 April 2009 - 02:01 AM
เขียนให้สับสนหรือนี่ เหอๆ
Session == null ครับ - -"
------------------ EDIT ------------------
ผมว่าไม่รู้มันเกี่ยวไหมนะครับ - -"
คือ ผมเห็นข้อความที่คุณ Rux บอกว่า อีกกรณีที่ Session Lost คือ Server Re ตัวเอง เพราะไปแก้ไขไฟล์ในระบบ
ทีนี้ที่ผมคิดไว้คือ ผมได้มีการ ใช้ System.IO เพื่อ ทำการ Delete, Move , Create พวก File กับ Directory ด้วย ผมเลยชักไม่แน่ใจว่า มันจะเกี่ยวไหม น่ะครับ
Edited by natthavat28, 14 April 2009 - 12:12 PM.
#8 Pastel
Newbie
Members
Pip
10 posts
Posted 16 April 2009 - 02:05 PM
ปัญหา session หาย เท่าที่ผมเคยเจอนะครับ
- เกิดการ compile dll ของเวบใหม่ (ตรงนี้ ถ้า app เป็น website ที่มีแต่ .cs ต้องระวังเรื่องไฟล์ด้วย เพราะถ้ามีการแก้ไข อาจจะทำให้เกิดการ compile ใหม่อัตโนมัติครับ)
- iis หรือ app pool ถูก restart
- memory peak
- มีการทำ load balance เช่น ทำ web garden (ทำให้มี process ของ asp.net มากกว่า 1) แล้ว request วิ่งเข้ามาคนละ process กับของเดิม
#9 natthavat28
Member
MSP
PipPip
414 posts
Posted 16 April 2009 - 02:36 PM
ผมได้ปัญหาละครับ - -"
เนื่องจากผมมีการ Delete directory ที่อยู่ใน Virtual Web Dir. ตัวเอง ทำให้ App มัน Restart เป็นผลให้ SESSION LOST - -"
ทีนี้มีปัญหาต่อละครับ แล้วผมจะลบไฟล์ยังไงนี่
#10 natthavat28
Member
MSP
PipPip
414 posts
Posted 16 April 2009 - 10:48 PM
ได้ละครับ จากการที่คุ้ย กูเกิลไปเรื่อยๆ
นั่นเพราะ มันมีตัวที่ชื่อ Directory Monitoring คอยจับ Directory ผมอยู่ ทุกครั้งที่มีการ Rename / Delete มันจะทำให้ App ผม Restart และ Session Lost ในที่สุด ตามที่ผมบอกไว้ Rep ก่อนหน้านี้
วิธีแก้แบบ Keyboard ทุบดินเลยครับ ปิดมันซะ
และนี่ Code ครับ ผมเอาไปยัดใส่ Global Event Application Start ซะเลย
System.Reflection.PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
object o = p.GetValue(null, null);
System.Reflection.FieldInfo f = o.GetType().GetField("_dirMonSubdirs", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
System.Reflection.MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); m.Invoke(monitor, new object[] { });
ขอขอบคุณทุกท่านที่ตอบคำถามนี้ของผมมาตลอดนะครับ ขอบคุณมากครับผม ^ ^