จากบทความ php เรื่อง
PHP กับการทำ form login อย่างง่าย จะเป็นการ login ที่มีรูปแบบธรรมดา แต่ก็มีปัญหาว่าหากผู้ใช้งานเข้าหน้าหลักของระบบโดยที่ไม่ได้ผ่านการ login ได้หรือไม่ ก็ต้องบอกว่ามีความเป็นไปได้ แล้วเราจะทำหน้า login ไว้ป้องกันทำไม ดังนั้นวันนี้เรามาดูวิธีแก้ไขกันดีกว่า ลักษณะโค้ด php มันก็จะคล้าย ๆ กับ บทความ
PHP กับการทำ form login อย่างง่าย แต่จะมีการใช้คำสั่งที่เกี่ยวกับ session เข้ามาเกี่ยวข้อง มาดูตัวอย่างโค้ดกันเลยครับ
1. โค้ด login.php
<?
ob_start();
session_start();
?>
<form name="form1" method="post" action="check.php">
<table width="300" height="27" border="0" align="center" cellpadding="0" cellspacing="10">
<tr>
<td>รหัสผู้ใช้งาน</td>
<td>
<div align="center">
<input type="text" name="user">
</div></td>
</tr>
<tr>
<td>รหัสผ่าน</td>
<td>
<div align="center">
<input type="password" name="pass">
</div></td>
</tr>
<tr>
<td colspan="2"><p align="center"><br>
<input type="submit" name="Submit" value="ตกลง">
<input type="reset" name="Submit2" value="ยกเลิก">
</p>
</td>
</tr>
</table>
</form>
จากด้านบนตัวสีแดงเป็นการเปิดคำสั่ง session ให้เริ่มทำงาน ส่วนโค้ดอื่น ๆ ก็เป็นโค้ด form สำหรับ login ธรรมดา ๆ
2. สร้างฐานข้อมูลเพื่อจัดเก็บข้อมูลรหัสผู้ใช้งาน และรหัสผ่าน ซึ่งในที่นี้ผมใช้ MS Access ในการจัดเก็บ
3. สร้าง code php เพื่อใช้ในการตรวจสอบว่าข้อมูลรหัสผู้ใช้งาน และรหัสผ่านที่ผู้ใช้งานกรอกมาตรงกับฐานข้อมูลที่มีอยู่หรือไม่ ดูตัวอย่าง code check.php ด้านล่างเลยครับ
<?php
ob_start();
session_start();
$dsn = "login"; // กำหนดชื่อ DSN
$user_name =""; // กำหนดชื่อล็อกอิน
$pass_word =""; // กำหนดรหัสผ่าน
$connect = odbc_connect($dsn, $user_name, $pass_word) or die("ติดต่อ DSN ไม่ได้");
$sql = "SELECT user.team, *
FROM [user]
WHERE (((user.username)='$user') AND ((user.password)='$pass'))";
$exec = odbc_exec($connect, $sql); // เริ่มเอ็กซิคิวต์คำสั่ง SQL
$num_rows = odbc_result($exec, 1); // ตัวแปรจำนวนเรกคอร์ด
if(empty($num_rows))
{
echo"<br><center>user หรือ password ไม่ถูกต้อง</center></br>";
}
else
{
session_start();
$_SESSION[id]=session_id();
$_SESSION[username]=$user;
header('location:main1.php');
}
odbc_close($connect); // ปิดการเชื่อมต่อ
?>
จาก code จะมีลักษณะการทำงานคือ เมื่อตรวจสอบข้อมูลกับฐานข้อมูลแล้ว หากไม่มีผู้ใช้งานนี้ในฐานข้อมูลก็จะมีข้อความเตือนขึ้นมา แต่ถ้ามีข้อมูลในฐานข้อมูลก็จะเรียกใช้งาน session เพื่อเก็บข้อมูล sess_id และ username ไว้ในเครื่องเพื่อนำมาเรียกใช้งานครั้งต่อไป และเมื่อเก็บแล้วก็ให้ไปที่หน้าหลักของระบบต่อไป
4. การป้องกันการเข้าหน้าหลักโดยไม่ได้ผ่านการ login ซึ่งจำเป็นที่จะต้องใส่ code php นี้ในทุกหน้าที่เรามี หากไม่ได้ login เมื่อเข้ามาก็จะกลับไปหน้า login อีกครั้ง ตัวอย่างด้านล่างครับ
<?
session_start();
$sess_id=$_SESSION[id];
$sess_username=$_SESSION[username];
if ($sess_id<>session_id() or $sess_username=="")
{
echo "กรุณา Login ";
echo "<meta http-equiv=\"refresh\" content=\"3;URL=login.php\" target=mainFrame\">";
exit();
}
?>
5. หลังจากการใช้งานระบบทุกครั้งจะต้อง logout ออกทุกครั้ง เพื่อเป็นการล้าง session ออกจากความจำของเครื่องเพื่อป้องกันคนอื่นมาใช้งานเครื่องเราต่อ ตัวอย่างโค้ด logout.php ด้านล่างเลยครับ
<?php
session_start();
session_destroy();
header("Location: login.php");
?>
ลองนำไปประยุกต์ใช้กันน่ะครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น