2 พฤศจิกายน 2553

เว็บล่มเพราะ session มาก

session
    เหตุการณ์นี้เกิดขึ้นเมื่อปริมาณผู้ใช้มีเยอะขึ้นแล้วมีการล็อคอินมากขึ้น ตัวอย่างเว็บนี้เมื่อมีปริมาณสมาชิกมาก ๆ (ในตอนนี้ก็ประมาณ หมื่นห้าพันคน เห็นจะได้) ล็อคอินบ้างไม้ได้ล็อคอินบ้าง ก็แล้วแต่ ปริมาณ session ก็เพิ่มมากขึ้นสะสมจนฐานข้อมูลใหญ่จนเกิน memory limit ที่ทาง host ตั้งไว้ แล้วก็เดี้ยง เข้าเว็บไม่ได้ (เกิดอะไรขึ้นอ่ะงง)
ก่อนอื่นก็มารู้จักกับ session กันก่อน ข้อความด้านล่างนำมาจากเว็บไซต์ http://www.expert2you.com/view_article.php?art_id=1843
Session คืออะไร
เพื่อที่จะเข้าใจเรื่อง session มาดูตัวอย่างดีกว่าครับ ว่าเราใช้ session ทำอะไร ผมขอยกตัวอย่างจากบทความเก่าก็แล้วกันครับ ที่ http://www.expert2you.com/view_article.php?cat_sel=50709&art_id=796 ที่เป็นการทำการ login โดยใช้ cookie ครับ แต่จากบทความอันเก่าของผมมีข้อจำกัดอยู่บางส่วนครับคือ

1. ไม่มีความปลอดภัยครับ คือถ้าผู้ใช้งานรู้ที่อยู่การเก็บของ cookie ก็จะสามารถไปแก้ไขเพื่อเปลี่ยนเป็น user คนอื่นได้เอง ซึ่งโดยปกติ file cookie จะถูกเก็บอยู่ที่ c:\Documents and Setting\ชื่อ user\Cookies ครับ ก็เข้าไปแก้ค่าใน cookie ก็เปลี่ยนเป็น user คนอื่นได้แล้วครับ ไม่มีความปลอดภัยเลย


2. ตัวอย่างนั้น ไม่มีการเก็บค่าอะไรเอาไว้ที่ server เลย ซึ่งก็เป็นตัวอย่างที่ง่ายมากครับ สมมตินะครับ ว่าจะต้องมีการเก็บข้อมูลอื่นๆอีก เช่น ชื่อ นามสกุล เราก็อาจต้อง set cookie เพิ่มอีกเพื่อให้เก็บที่เครื่อง client เช่น SetCookie("firstname",$firstname,time()+3600); SetCookie("lastname",$lastname,time()+3600); ซี่งก็พอจะทำได้ครับ แต่หากเราไม่ serious กับเรื่องความปลอดภัยตามข้อแรก และเรามีข้อมูลที่จะเก็บที่ client ไม่มากนัก ก็ใช้ได้ครับ แต่หากเราต้องการทำให้ดีกว่านี้ ก็ลองอ่านบทความนี้ดูครับ

Session ID
แทน ที่เราจะเก็บข้อมูลทุกอย่างในฝั่ง client โดยเก็บไว้ใน cookie เราก็เก็บเฉพาะตัวเลขตัวนึงที่เอาไว้อ้างอิง ซึ่งเรียกว่า session id แล้วที่ server เราก็เก็บตัวเลข session id นี้ไว้ด้วยเอาไว้ จับคู่กับค่าอื่นๆที่จะต้องใช้เช่น ชื่อ นามสกุล หรืออื่นๆที่เราต้องการ เหมือนกับเวลาที่เราไปหาหมอที่โรงพยาบาลครับ ปกติโรงพยาบาล ก็จะออกบัตรให้เรามาเก็บไว้ใช่ไหมครับ บัตรอันนั้นก็เหมือนกับ cookie ครับ ส่วนที่โรงพยาบาลเขาก็จะเก็บประวัติการรักษาของเราเอาไว้ ซึ่งประวัติการรักษา ก็จะเหมือนกับข้อมูลที่ถูกเก็บเอาไว้ที่ server ครับ เวลาเราไป เราก็ยื่นบัตรโรงพยาบาลไปให้พยาบาล จากนั้นเขาก็สามารถจะรู้ข้อมูลทุกอย่างของเราที่มีการเก็บเอาไว้ที่โรง พยาบาลครับ ซึ่งก็เหมือนกับเวลาเราเข้า net เราเข้าไปในเว็บไซต์ที่เราเคยเป็นสมาชิกไว้ เรา login จากนั้น server ก็จะส่ง cookie มาเก็บไว้ที่เครื่องเรา และข้อมูลอื่นๆ ก็จะเก็บเอาไว้ที่ server ทุกครั้งที่เราเข้ามาที่เว็บนี้ ทาง server ก็จะรู้ว่าเป็นใครจาก cookie ที่เก็บไว้ที่เครื่อง client
เอ้า จบการอ้างอิง พอสังเขป ว่า session เอาไว้ทำอะไร แล้วจะทำอย่างไรเมื่อเกิดเหตุการณ์นี้ขึ้น ไม่ยากครับให้ล็อกอินเข้า phpmyadmin ของฐานข้อมูล joomla ที่ได้ติดตั้งไว้
session

รูปด้านบนจะเห็นได้ว่ามีการเก็บค่าของ jos_session ค่อนข้างเยอะ
ให้เลื่อนลงมาด้านล่าง
session
เลือก check all หรือจะเลือกเฉพาะ jos_session ก็ได้

session
จากนั้นก็มาเลือกที่ Optimize table เพื่อเป็นการ เพิ่มประสิทธิภาพและลบสิ่งที่ไม่จำเป็น (ขยะ) ออกไป เท่านี้ก็เรียบร้อยครับ เว็บไซต์กลับมาใช้งานได้ปกติ

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