December 6, 2012

PHP: ระบบสมาชิก - log in, log out

คราวก่อน เขียนถึงระบบสมาชิกส่วนแรกซึ่งก็คือ การสมัครสมาชิก คราวนี้มาดูการ log in กับ log out กันบ้าง เริ่มต้นจากสร้างแบบฟอร์มสำหรับ log in กันก่อน แบบฟอร์มก็แบบเดียวกับที่พบได้ตามเว็บไซต์ทั่วไป ส่วน .php ที่ใช้ในการ log in จะเริ่มต้นด้วยการตรวจสอบเบื้องต้นก่อนว่า ผู้ใช้ลืมกรอกข้อมูล หรือเปล่า ถ้าทุกอย่างไม่มีปัญหาอะไร ก็มาตรวจสอบบัญชีผู้ใช้ในฐานข้อมูล โดยใช้การเชื่อมต่อผ่าน PDO เหมือนเดิม ซึ่งตอนที่ตรวจสอบรหัสผ่านนั้น ในตอนสมัครสมาชิก เราใช้การ hash และ salt ในการเก็บข้อมูลของรหัสผ่าน ในขั้นตอน log in เราก็จะต้องแปลงรหัสผ่านให้กลายเป็น hash ที่ถูกต้องด้วย ตอนนี้เราสามารถ log in เข้ามาได้แล้ว แต่ผู้ใช้ต้อง log in ใหม่ทุกครั้งเวลาเปลี่ยนหน้า อันนี้ต้องใช้ session เข้ามาช่วยในการจดจำผู้ใช้

เริ่มต้นด้วยการเพิ่ม session_start() ไว้ในส่วนบนสุดของ .php ต่อมาก็เพิ่มโค้ดให้เก็บค่าลง session เข้าไปก่อนที่จะ redirect ไปยังหน้าอื่น และเพื่อไม่ให้มีการ log in ซ้ำซ้อน ซึ่งอาจจะนำปัญหามาให้ ก็ให้ตรวจสอบก่อนว่ามีการ log in อยู่แล้วหรือไม่เสียก่อน ในตอนเริ่มแรก ส่วนในหน้าอื่น ๆ ที่จำเป็นต้อง log in ก่อน เพื่อแสดงข้อมูลออกมาก็ให้ตรวจสอบค่า $_SESSION['username'] ดูว่ามีการ log in หรือไม่ ถ้ามีก็ดึงข้อมูลมาตามปกติ แต่ถ้าไม่มีจะบังคับให้ log in เสียก่อน หรือแสดงข้อมูลที่แตกต่างกันออกไป อันนี้ก็แล้วแต่จะออกแบบ ส่วนการ logout นั้นทำได้ง่าย ๆ ด้วยคำสั่ง session_destroy() ทุกอย่างก็หายไป ทั้งหมดนี้เป็นเพียง โครงร่างคร่าว ๆ ที่สามารถทำงานได้ ถ้าหากต้องการให้เว็บออกมาสวยงาม จำเป็นต้องใช้การวางเลย์เอ้าท์ รวมทั้งการออกแบบการไหลของข้อมูลเสียใหม่ แต่โดยรวมแล้ว จะมีฟังชั่นที่จำเป็นเพียงเท่านี้ ที่ผ่านมาจะเห็นว่าไม่มีการพูดถึง SQL Injection เลยเพราะว่า เราใช้ฟังชั่น PDO::prepare() ในการเตรียมข้อมูล ตราบใดที่ไม่มีบั๊กในฟังชั่นนี้ ฐานข้อมูลของเรายังปลอดภัยอยู่

No comments:

Post a Comment