login.html
<form id="login" method="post" action="login.php"> <label for="username">User:</label> <input type="text" id="username" name="username" /> <label for="password">Pass:</label> <input type="password" id="password" name="password" /> <input type="submit" id="login" name="login" value="Log in" /> </form>
login.php
<?php $error = false; // get log in information via post $u_name = $_POST['username']; $u_pass = $_POST['password']; // check empty input if (empty($u_name) || empty($u_pass)) { $error = true; } if (!$error) { // everything fine, check user info in database } else { // empty username or password, tell the user echo 'Invalid username or password.'; }
ตอนนี้เราสามารถ log in เข้ามาได้แล้ว แต่ผู้ใช้ต้อง log in ใหม่ทุกครั้งเวลาเปลี่ยนหน้า อันนี้ต้องใช้ session เข้ามาช่วยในการจดจำผู้ใช้
เริ่มต้นด้วยการเพิ่ม session_start() ไว้ในส่วนบนสุดของ .php
<?php //FILE: login.php session_start(); $error = false; . . .
เพิ่มโค้ดให้เก็บค่าลง session เข้าไปก่อนที่จะ redirect ไปยังหน้าอื่น
// FILE: login.php . . . // row count must == 1 if ($result !== false && $result->rowCount() == 1) { // fetch data $data = $result->fetch(); // saved to session SESSION['username'] = $data['username']; SESSION['email'] = $data['email']; // redirect to other page (member.php) // warning: there must no another output before this, otherwise it might failed header('Location: member.php'); } else { echo 'Invalid username or password.'; } . . .
และเพื่อไม่ให้มีการ log in ซ้ำซ้อน ซึ่งอาจจะนำปัญหามาให้ ก็ให้ตรวจสอบก่อนว่ามีการ log in อยู่แล้วหรือไม่เสียก่อน ในตอนเริ่มแรก
<?php //FILE: login.php session_start(); // if already logged in redirect if (isset($_SESSION['username'])) { header('Location: member.php'); } $error = false; . . .
ส่วนในหน้าอื่น ๆ ที่จำเป็นต้อง log in ก่อน เพื่อแสดงข้อมูลออกมาก็ให้ตรวจสอบค่า $_SESSION[‘username’] ดูว่ามีการ log in หรือไม่ ถ้ามีก็ดึงข้อมูลมาตามปกติ แต่ถ้าไม่มีจะบังคับให้ log in เสียก่อน หรือแสดงข้อมูลที่แตกต่างกันออกไป แล้วแต่จะออกแบบ
<?php // FILE: member.php // always start with this session_start(); // check log in status if (isset($_SESSION['username'])) { // do anything you want echo 'Hello ' . $_SESSION['username'] . ' (' . $_SESSION['email'] . ')'; echo ' '; echo '<a href="logout.php">Log out</a>'; } else { echo 'Please log in!.'; }
การ logout นั้นทำได้ง่าย ๆ ด้วยคำสั่ง session_destroy() ทุกอย่างก็หายไป
<?php // FILE: logout.php session_start(); session_destroy(); echo 'Logged out';
การ Logout ก็คือการ clear session
<?php session_start(); unset($_SESSSION['id']); // clear session unset($_SESSION['pwd']); session_destroy(); // ทำลาย session ?>
หากทำลายเฉพาะบางตัว
session_start(); session_unregister("xxxx");
หากทำลายทั้งหมด
session_start(); session_destroy();
session_destroy() จะลบตัวแปรเซซชั่นหมด
unset จะลบเฉพาะที่เราต้องการลบ
session_id(); คือ หมายเลขประจำเครื่อง Client ซึ่งแต่ละเครื่องหรือ Browser จะมีค่าไม่เหมือนกัน session_start(); เป็นคำสั่งสำหรับการเริ่มใช้งาน session $_SESSION["var"] = value; คือการประกาศค่าตัวแปร session $SESSION["var"]["1"] = value; // Session แบบ Array $SESSION["var"]["2"] = value; // Session แบบ Array session_write_close(); จบการ Create Session unset($_SESSION["var"]); ยกเลิก/ลบค่า Delete Session ที่ต้องการ session_destroy(); ยกเลิกลบค่า Delete Session ทั้งหมด