10/10/2018, 10:48

[tutor] tạo một trang đăng nhập bằng php

hì lâu lắm rồi mới đăng nhập vào diễn đàn tin học. Nay post một bài chơi
để làm một trang đăng nhập(login) bằng php trước hết bạn cần làm một trang html chứa các form để đăng nhập
Đây cà code của tôi. đặt tên là login.html
Code:
<form method=post action="login.php">
Username: <input type=text name=user size=30><br>
Password: <input type=password name=pass size=30><br>
<input type=submit value=login>
</form>
còn đây là file đẻ check user và pass. Đặt tên là login.php
Code:
<?php
session_start(); // Khoi dong session
$admin_user = "admin"; // User name cua admin ma ban muon
$admin_pass = "admin"; // Password cua admin ma ban muon
if($user == $admin_user AND $pass == $admin_pass){
      session_register("loged");
      echo("ban da dang nhap thanh cong");
      header("location: admin.php");
}
else
{
      echo("nay ban co thuc su la admin khong day");
}
?>
vậy là xong file để kiểm tra username và password
đây là file admin.php
Code:
<?php
session_start(); // Khoi dong session
if(session_is_registered("loged")){
     echo("Xin chao admin! ban da dang nhap thanh cong vao cpanel");
}
else
{
echo("Thang nao khong co dang nhap thi dung hong vao nhe");
}
?>
QueenRock viết 13:02 ngày 10/10/2018
Hay qua, bay gio minh moi biet
thanks
NsT viết 12:59 ngày 10/10/2018
nếu bác nào muốn làm thêm cái Logout cho nó máu thì có thể code thêm như sau trong trang admin.php
Code:
<a href=?action=logout>Logout</a>
<?
if($_GET['action']=="Logout"){
session_destroy();
echo" Bye đại ca , hẹn gặp lại !";
header("location: login.php");
}
?>
Các bác thử coi có được không
binhvn viết 12:55 ngày 10/10/2018
hi ! trưa nay ngồi code tự nhiên phát hiện thấy cái tutor của tôi viết có một lỗi. Lỗi này có thể giúp người khác không cần đăng nhập cũng có thể vào acp.
giả sử tôi là người muốn hack thì tôi chỉ cần tạo một file có nội dung như sau
Code:
<?php
session_start();
session_register("loged");
?>
với đoạn code trên chỉ cần up lên host rồi chạy là có thể vào được ACP
giải thích: khi chạy đoạn mã trên thì sẽ session sẽ được đăng ký trùng với session mà trang ACP đăng ký vì vậy chỉ cần chạy đoạn mã đó rồi chuyển sang admin.php là có thể vào được.
Cách fix: cũng khá đơn giản . Chỉ cần bạn đăng ký thêm một session nữa chứa pass của admin rồi dùng nó để kiểm tra là ok
lúc này login.php sẽ như sau:
Code:
<?php
session_start(); // Khoi dong session
$admin_user = "admin"; // User name cua admin ma ban muon
$admin_pass = "admin"; // Password cua admin ma ban muon
if($user == $admin_user AND $pass == $admin_pass){
      $pass = md5($admin_pass);
      session_register("loged");
      session_register("pass");
      echo("ban da dang nhap thanh cong");
      header("location: admin.php");
}
else
{
      echo("nay ban co thuc su la admin khong day");
}
?>
và file admin.php như sau
Code:
<?php
session_start(); // Khoi dong session
if(session_is_registered("loged") AND $pass == md5($admin_pass)){
     echo("Xin chao admin! ban da dang nhap thanh cong vao cpanel");
}
else
{
echo("Thang nao khong co dang nhap thi dung hong vao nhe");
}
?>
còn nữa nếu viết đoạn code để logout như bác NsT cũng được nhưng như thế thì tất cả các session trên máy đều bị xóa
thay vào đó ta dùng session_unregister("tên session muon xóa(VD: loged)"); thay cho session_destroy();
QueenRock viết 12:52 ngày 10/10/2018
Hi binhvn, có 1 vài vấn đề thế này:
+ thứ nhất: ai upload lên host vậy, nếu "thằng nào đó" upload được lên thì cần gì phải vào admin làm rì :P
+ thứ 2: session được lưu trên server, làm thế nào session của người này lại nhảy sang của người khác được
+ thứ 3: làm thế nào để biết được tên biến session do ta đặt :P

Còn nữa, nên dùng $_POST['variable'] chứ không nên xài $varivable :P
NsT viết 12:52 ngày 10/10/2018
hoàn toàn đồng ý với bác queenrock nếu "thằng nào đó" mà up file lên host mình được thì có lẽ không cần dzô Cp nữa mà down cả cái web của mình luôn phải không bác , còn về vụ logout thì bác binhvn nói đúng , nên dùng session_unregister , vì cái cp của tớ chỉ có 1 cái session nên dùng luôn thế cho tiện , còn cp bác nào mà chơi nhiều session thì nên dùng session_unregister như bác binhvn đã nói
binhvn viết 12:54 ngày 10/10/2018
em nghĩ chỉ cần nó chạy ở localhost là được rồi còn cái vụ biết được tên biến hay không cũng còn tùy thuộc vào người đặt mà
đau có thể nói là không thể biết

+ thứ 2: session được lưu trên server, làm thế nào session của người này lại nhảy sang của người khác được
hì cái này em nhầm
QueenRock viết 12:57 ngày 10/10/2018
Nếu run ở localhost mình có thể tùy tiện cấu hình php.ini không nói làm gì, nhưng đem lên server thì còn tùy server cấu hình thế nào, và 1 điều đơn giản là trên đó mình KHÔNG cấu hình được, ~~~~> nên đặt cho nó đúng để tránh lằng nhằng
nguyenTA viết 12:57 ngày 10/10/2018
mấy bác cho hỏi: khi mình phân quyền cho users, làm thế nào để sau khi login thì user không thể vào trang admin mặc dù cả 2 đều login từ 1 trang??
Tôi muốn dùng 1 trang chec_login_data.php để xử lý mỗi khi có người nào login. Tôi đã thử nhiều cách nhưng vẫn chưa giải quyết được gì cả...bác nào có ý kiến thì post lên tham khảo đi
NsT viết 12:50 ngày 10/10/2018
hay bạn thử dùng if xem có được không , bạn set 1 cái level cho mỗi user
ví dụ là :
Code:
if($level!="Administrator") {
// show menu for Guest or Mod
if ($level=="Mod"){
// show menu for Mod
}
} else {
//show all menu for Admin
}
Bạn thử xem có được không
Bài liên quan
0