PDA

View Full Version : Hỏi về trang đăng nhập admin!!!



diepnghitinh
08-05-2008, 15:17
Mình có cái form sau:



<form action="login.php" method="POST">
<table border="1" align="center" cellspacing="1" width="300" id="login" class="table" height="98">
<tr>
<td height=25 width=100% class="tcat" align=center valign="middle" colspan="2" style="border-left:1px solid #C0D0DF; border-right:1px solid #C0D0DF; border-top:1px solid #C0D0DF; ">
<strong><font color="#FFFFFF">Control Panel</font></strong>
</td>
</tr><tr>
<td width=30% align="center" height="20">
Username :</td>
<td width=70% height=20 align="left">
<input name="taikhoan" type="text" size="29" style="font-weight: 700; float:left">
</td></tr><tr>
<td width=30% align="center" height="20">
Password : </td>
<td width=70% height=20 align="left">
<input name="matkhau" type="password" size="29" style="font-weight: 700; float:left">
</td></tr><tr><td width=70% height=25 colspan="2" align="right" class="tbottom">
<p align="center">
<input type="SUBMIT" name="SUBMIT" value="SUBMIT" size=6 style=cursor:pointer name=shfirewall class=button>
</td></tr></table></form>


khi ta submit thông tin của $taikhoan, $matkhau sẽ dc gửi đến file login!!
Vậy file login của mình như sau:



require_once("includes.php");
$result = mysql_query("select * from ".$db_type."user") or
die (mysql_error());
$pwmd5 = md5($matkhau);

$row = mysql_fetch_array($result);
if ($taikhoan == $row["username"] && $pwmd5 == $row["password"])
{
header('Location: home_dnt.php');
}
else
{
echo "<meta http-equiv='refresh' content='0;url=index.php'>";
}

mysql_free_result($result);


Sau khi includes qua file includes.php để truy cập vào db và query dữ liệu để đọc user pass từ ".$db_type."user (tbl_user) rồi lấy giá trị user/pass của db đem đi so sánh với dữ liệu nhập vào:



if ($taikhoan == $row["username"] && $pwmd5 == $row["password"])
{
header('Location: home_dnt.php');
}
else
{
echo "<meta http-equiv='refresh' content='0;url=index.php'>";
}


Nếu đúng thì header chuyển đến page home_dnt.php còn sai thì trở về trang đăng nhập!!
Nếu header('Location: home_dnt.php'); thì độ bảo mật sẽ rất kém!! Mình đã xem qua 1 số source mở trên mạng và tìm thấy 1 điều lý thú!!
Ta thử xem qua code login.php của xtremedia:



<?php
define('IN_MEDIA', true);
include("../includes/config.php");
if (isset($_POST["submit"])) {
$name = $_POST['name'];
$password = md5(stripslashes($_POST['password']));
$q = $mysql->query("SELECT user_id FROM ".$tb_prefix."user WHERE user_name = '".$name."' AND user_password = '".$password."' AND (user_level = 2 OR user_level = 3)");
if ($mysql->num_rows($q)) {
$r = $mysql->fetch_array($q);
$_SESSION['admin_id'] = $r['user_id'];
}
header("Location: ./");
}
?>

Khi giá trị đúng header sẽ tự chuyển lại trang index và tự login vào!!
Xem code trang index nhá các bạn:


<?php
define('IN_MEDIA', true);
define('IN_MEDIA_ADMIN', true);
include("../includes/config.php");
include("../includes/functions.php");
include("../includes/class_form.php");

$level = m_check_level($_SESSION['admin_id']);

if ($act == 'backup' && $_POST['submit'] && $level == 3) {
include("media_dbbackup.php");
exit();
}
$form =& new HTMLForm;
?>
<html>
<head>
<?php if ($act == 'left') echo '<base target="frame_content">'; ?>
<title>.: <?=$webTitle?> CP :.</title>
<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
<link rel=stylesheet href="style.css" type=text/css>
</head>
<? if (!$level) { ?>
<form method="post" action="login.php">
<table width=31% align=center cellpadding=2 cellspacing=0 class=border bgcolor=white>
<tr><td colspan=2 align=center class=title>Đăng nhập</td></tr>
<tr><td width=48% class=fr>Tên đăng nhập</td><td width=52% class=fr_2><input name="name" type="text" size="20"></td></tr>
<tr><td class=fr>Mật khẩu</td><td class=fr_2><input name="password" type="password" size="20"></td></tr>
<tr><td class=fr colspan=2 align=center><input class="submit" type="submit" name="submit" value="Đăng nhập"></td></tr>
</table>
</form>
<?
exit();
}
include("admin_functions.php");

if ($level == 2) $mod_permission = acp_get_mod_permission();
$link = 'index.php';
if ($_SERVER["QUERY_STRING"]) $link .= '?'.$_SERVER["QUERY_STRING"];
?>
<script src="../js/admin.js"></script><script src="../js/him.js"></script>
<?php
if ($act) echo '<table cellspacing="0" align="center" cellpadding="0" width="100%"><tr><td align="center" width="100%">';
switch($act){
case "song": include("media_song.php");break;
case "song_multi_edit": include("media_song_multi_edit.php");break;
case "singer": include("media_singer.php");break;
case "cat": include("media_cat.php");break;
case "album": include("media_album.php");break;
case "tpl": include("media_tpl.php");break;
case "ads": include("media_ads.php");break;
case "user": include("media_user.php");break;
case "config": include("media_configures.php");break;
case "backup": include("media_dbbackup.php");break;
case "server": include("media_server.php");break;
case "mod_permission": include("media_mod_permission.php");break;
case "main" : echo "Welcome to XtreMedia CP"; break;
case "header" : echo "<div class=title><b>".$webTitle." Control Panel</b></div>";break;
case "left" : include("left.php");break;
default :
echo '<script type="text/javascript">if (self.parent.frames.length != 0) self.parent.location.replace(document.location.hre f);</script>';
?>
<frameset cols="200,*" rows="*" id="mainFrameset">
<frame src="index.php?act=left" name="frame_navigation" frameborder="0" noresize />
<frameset rows="20,*">
<frame src="index.php?act=header" frameborder="0" noresize />
<frame src="index.php?act=main" name="frame_content" id="frame_content" frameborder="0" noresize />
</frameset>
</frameset>
<?
break;
}
if ($act) echo '</td></tr></table>';
?>
</html>


Mình nhận thấy biến $_SESSION['admin_id'] = $r['user_id']; ở trang login rồi đem qua trang index rồi mới đăng nhập dc!! Vậy SESSION là gì!! Phương thức sử dụng ra sao! Có tài liệu nào chỉ cặn kẽ về nó không! Xin nhờ các bạn giúp đỡ! Tôi chỉ là 1 newbie

vtnphong
08-05-2008, 15:23
hix, code dài quá, lười đọc ghê.

Nói chung Session là một dạng biến giống như Cookies vậy. Có điều là nó sẽ bị xóa khi đóng browser. Trong cái documentation trên php.net có nói về nó tương đối kỹ đó.

diepnghitinh
08-05-2008, 15:26
Cám ơn bạn! Mình sẽ xem...