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 1 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