Home » » Tạo trang đăng nhập, đăng ký sử dụng cookie, session viết bằng php, mysql

Tạo trang đăng nhập, đăng ký sử dụng cookie, session viết bằng php, mysql

Written By nguyen ngoc hieu on Thứ Năm, 3 tháng 10, 2013 | 11:44

Vấn đề là chúng ta muốn tạo trang đăng ký account, đăng nhập, có nút ghi nhớ tên đăng nhập , viết bằng PHP và MySQL ( bài này trước đây có viết rồi nhưng thấy có nhiều lỗi quá nay viết lại hoàn chỉnh hơn )
 Các bước thực hiện :

1. Tạo cơ sở dữ liệu (database ) : shopping

2. Tạo bảng (table) dữ liệu trong cơ sở dữ liệu trên : user

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(100)  NOT NULL,
  `password` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
) ;

3. Tạo file "check_login.php", file này phần php dùng để kiểm tra dữ liệu nhập vào từ form html, nội file như sau :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
session_start();
$_SESSION['db_is_logged_in'] = false;
$remember=false;
if(isset($_POST['ok'])){
    if(($_POST['username'] == NULL)&&($_POST['password'] == NULL)) {      
    //echo "Ban khong nhap vao Username va Password " ."<br>";
      header("location:check_login.php");
      } else if($_POST['username'] == NULL){          
       // echo " Ban chua nhap Usernam " ."<br>";
         header("location:check_login.php");
      } else if($_POST['password'] == NULL){        
              //echo " Ban chua nhap Password" ."<br>";
         header("location:check_login.php");
                         

               } else {
        $u=$_POST['username'];
        $p=md5( addslashes($_POST['password']));  
        $connect=mysql_connect("localhost","root","huy") or die("can't connect this database");
        mysql_select_db("shopping",$connect);
        $sql="select * from user where username='".$u."' and password='".$p."'";
        $query=mysql_query($sql);
        if(mysql_num_rows($query)==0) {
            //echo " Ban nhap username va password khong dung " ."<br>";
        header("location:check_login.php");    
        } else {      
                $row=mysql_fetch_array($query);      
                $_SESSION['db_is_logged_in'] = true;    
                $_SESSION['username'] = $row["username"];
                $_SESSION['id'] = $row["ID"];
                $_SESSION['password'] = $row["password"];
              if (isset($_POST['remember'])) {
            $_SESSION['remember']=true;
            setcookie("remember", $_SESSION['remember'],time()+60*60*24*100);
            $_COOKIE["remember"];
            setcookie("NhapTen", $_SESSION['username'], time()+60*60*24*100, "/");
            $_COOKIE["NhapTen"];
            setcookie("NhapMK", $_SESSION['password'], time()+60*60*24*100, "/");
            $_COOKIE["NhapMK"];                
          }        
          header("location:management.php"); // kiem tra dung, khong check
          exit;      
        }
    }
} else if($_COOKIE["remember"]==true) {
 $_SESSION['db_is_logged_in'] = true;
  header("location:management.php");
  }

?>

<html>
<head>
</head>

<body>


<form action='' method='POST'>

<table>
<tr>
<td>Tên đăng nhập:</td> <td> <input type='text' name='username' value='NhapTen' /> </td>
</tr>
<tr>
<td>Mật khẩu:</td> <td> <input type='password' name='password' value ='NhapMK'  /> </td>
</tr>

<tr>
<td align="left" colspan="2" >
<input type="checkbox" name="remember" /> 
Ghi nhớ 
</td>
</tr>

<tr>
<td align="center" colspan="2">
<input type='submit' name='ok' value='Đăng nhập'
<input type="reset" name = 'cancel' value = 'Cancel' />  
</td>
</tr>

</table>

</form>
</body>

</html>

4. Tạo file "management.php", file này điều phối  quá trình logout, vì có 2 quá trình logout khác nhau, nội dung file như sau :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<?php
session_start();
if(isset($_COOKIE['NhapMK']))
{
 echo "Tên đăng nhập :<b>".$_COOKIE["NhapTen"]."</br>";
 
 echo " Bạn đã  vào Check Remember " . "</br>" ;

 print " <a href='remove.php'>Nhấp vào đây để thoát</a>";
}
if(($_SESSION['db_is_logged_in'] == true)&&((isset($_COOKIE['NhapMK']))==false)) 
{
   echo "Tên đăng nhập :<b>".$_SESSION['username']."</br>";

 
  
   print "<a href='logout.php'>Nhấp vào đây để thoát</a>";
}
?>

5. Tạo file "logout.php", file này dùng để logout trường hợp không có check vào mục " Ghi nhớ", nội dung file :

<?php
session_start();
if (isset($_SESSION['db_is_logged_in'])) {
unset($_SESSION['db_is_logged_in']);
}
// trở về trang login
header('Location: check_login.php');
?>

6. Tạo file "logout_remember.php", file này dùng logout trường hợp có check "Ghi nhớ ", nội dung file như sau :


<?php
session_start();
setcookie("remember", $_SESSION['remember'],time()-60*60*24*100);
$_COOKIE["remember"];
setcookie("NhapTen", $_SESSION['username'], time()-60*60*24*100, "/");
$_COOKIE["NhapTen"];
setcookie("NhapMK", $_SESSION['password'], time()-60*60*24*100, "/");
$_COOKIE["NhapMK"];    
     
header("location:check_login.php");
exit;

?>

7. Tạo file "register.php", file này dung kiểm tra quá trình nhập liệu tạo account, kiểm tra thỏa diều kiện thì  insert vào table "user", nội dung file :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<?php
// Tải file mysql.php lên
require_once("mysql.php");
if ( isset($_POST['ok']) )
{
// Dùng hàm addslashes() để tránh SQL injection, dùng hàm md5() để mã hóa password
$username = addslashes( $_POST['username'] );
$password = md5( addslashes( $_POST['password'] ) );
$verify_password = md5( addslashes( $_POST['verify_password'] ) );
$email = addslashes( $_POST['email'] );
// Kiểm tra 4 thông tin, nếu có bất kỳ thông tin chưa điền thì sẽ báo lỗi
if ( ! $username || ! $password || ! $verify_password || ! $email )
{
print "Xin vui lòng nhập đầy đủ các thông tin. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
exit;
}
// Kiểm tra mật khẩu, bắt buộc mật khẩu nhập lúc đầu và mật khẩu lúc sau phải trùng nhau
if ( $password != $verify_password )
{
print "Mật khẩu không giống nhau, bạn hãy nhập lại mật khẩu. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
exit;
}
// Tiến hành tạo tài khoản
@mysql_query("INSERT INTO user (username, password, email) VALUES ('{$username}', '{$password}', '{$email}')");
// Thông báo hoàn tất việc tạo tài khoản
print "Tài khoản {$username} đã được tạo. <a href='check_login.php'>Nhấp vào đây để đăng nhập</a>";
}
?>

<html>
<head>
</head>

<body>
<form action="register.php" method="POST">
<table   align="left" >
<tr>
<td>Tên truy nhập:  </td><td> <input type="text" name="username" value=""></td> 
</tr>
<tr>
<td>Mật khẩu: </td><td> <input type="password" name="password" value=""> </td>
</tr>
<tr>
<td>Xác nhận mật khẩu:</td><td> <input type="password" name="verify_password" value=""> </td>
</tr>
<tr>
<td>Địa chỉ E-mail: </td><td><input type="text" name="email" value=""></td>
</tr>
<tr>
   <td align="center" colspan="2">      <input type="submit" name="ok" value="Đăng ký tài khoản"> </td>
</tr>
</table>     
</form>
</body>
</html>


8. Tạo file "user.php" , file này làm nhiệm vụ, xem có đăng nhập không, có thì được quyền là việc  A-Z gì đó , không thì đưa về trang đăng nhập "check_login.php", nội dung file:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<?php
session_start();

 if( $_SESSION['db_is_logged_in'] ==false)
  header("location:check_login.php");
?>

9. Tạo file "admin.php", file này kiểm tra tên đăng nhập phải là admin không, có thì được  làm viêc, không thì đưa về trang "check_login.php", nội dung file:

<?php
session_start();

// đặt một biến cho password admin
// passoword này có trong bảng cơ sở dữ liệu
// password dẫ được mã hóa MD5
// hoặc bạn tạo table chứa username và pass admin, sau đó dung hàm select để lấy ra rồi so sánh
$pass_admin=="chuỗi_ đã_ mã_ hóa _MD5";


// nếu không đăng nhập thì đưa về trang đăng nhập
 if( $_SESSION['db_is_logged_in'] ==false)
{
  header("location:check_login.php");
}

// Nếu có đăng nhập, không check "ghi nhớ", password không phải pass admin
 if( ($_SESSION['db_is_logged_in'] ==true)&&( $_SESSION['password']!=$pass_admin))
{
  header("location:check_login.php");
}

// Nếu có đăng nhập, có check "ghi nhớ", password không phải pass admin
// Trường hợp này khố tí là khi đóng trình duyêt, rồi mở lên, giá trị của pass giờ là lấy từ cookie
 if( ($_SESSION['db_is_logged_in'] ==true)&&( $_COOKIE["NhapMK"]!=$pass_admin))
{
  header("location:check_login.php");
}



?>

10. Video demo:


11. The End






0 nhận xét:

Đăng nhận xét