หน้าหลัก โค้ด-บทความ php โค้ด-บทความ javascript โค้ด-บทความ css สารบัญ สารบัญ

ทักทายครับ

สวัสดีครับ หลังจากที่ blog นี้หยุดการอัพเดททบความเกี่ยวกับโค้ดในการใช้ทำเวปไปนานไม่ว่าจะเป็น code php, html, javascript, css, ajax เนื่องจากผมไม่ค่อยมีเวลาจนลืม blog นี้ไปเลย นึกขึ้นได้ตอนปีใหม่ ไปค้นหาใน google แล้วตกใจ เนื่องจาก blog นี้ไปอยู่ลำดับที่ 1 ของการค้นหา ไม่เชื่อลองดู เลยขอถือโอกาสเริ่มต้นใหม่ในช่วงปีใหม่นี้เริ่มอัพเดทบทความตั้งแต่ตอนนี้เป็นต้นไป หวังเป็นอย่างยิ่งว่าจะมีผู้ติดตามบทความของผมต่อไปน่ะครับ ปล.ท่านใดสนใจลงโฆษณาสามารถติดต่อได้ที่ hotcodephp@gmail.com

24 ก.ค. 2555

PHP กับการทำ form login แบบป้องกันการไม่ได้ login

จากบทความ 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="ตกลง">
  &nbsp;
  <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");
?>

ลองนำไปประยุกต์ใช้กันน่ะครับ

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