วันศุกร์ที่ 27 มิถุนายน พ.ศ. 2557

session จบไว aspx

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[] { });

ขอขอบคุณทุกท่านที่ตอบคำถามนี้ของผมมาตลอดนะครับ ขอบคุณมากครับผม ^ ^

ไม่มีความคิดเห็น:

แสดงความคิดเห็น