PHP Вход в систему не ограничен - PullRequest
0 голосов
/ 19 июня 2011

Надеюсь, вы поможете мне с этим, (опять же в некоторых случаях!)

У меня есть система входа в php, которая использует соединение с базой данных mysql, сначала пользователь заполняет форму входа:

Code: admin/index.php:

<link rel="stylesheet" href="/styles/style-new.css" type="text/css" />
<script type="text/javascript">
function formfocus() {
  document.getElementById('myusername').focus();
}
window.onload = formfocus;
</script>

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form action="/?module=admin&n=checklogin" method="post" enctype="multipart/form-data" name="form1" id="form1">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Administrator Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input type="text" name="myusername" id="myusername" tabindex="1"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="password" id="mypassword" tabindex="2"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td> <button type="submit" name="Submit" tabindex="3">Login</button>
 <img src="../images/ajax-loader.gif" width="16" height="16" style="display: none"/>
 <script>
    $("button").click(function () {
    $("img").show("slow");
    });
  </script>
 </td>
</tr>
</table>
</td>
</form>
</tr>
</table>
<p align="center">Clicked on the wrong link? <a href="javascript: history.go(-1)">Click Here</a></p>
</div>

Затем он отправляется для проверки checklogin.php:

Code: checklogin.php:

<?php 
sleep(3)
?>
<link rel="stylesheet" href="../styles/style-new.css" type="text/css" />

<?php
session_start();
$host="localhost"; // Host name 
$username="david_bpd"; // Mysql username 
$password="documents123456"; // Mysql password 
$db_name="david_bpd"; // Database name 
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die(mysql_error()); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql) or die(mysql_error());

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row


$cdata = mysql_query("SELECT * FROM cuser");
$cdata = mysql_num_rows($cdata);
echo $cdata;


if($count==1){
//If a user is not already logged on
if($cdata == 1){
echo "<meta http-equiv='refresh' content='0;url=/?module=admin&n=Login_unavailable'>";
}
else {
//Register username
echo $myusername;
$_SESSION['myusername'] = $myusername;

var_dump($_SESSION['myusername']);

$_SESSION['myusername'] == $myusername;


$sql2="INSERT INTO cuser(myusername)VALUES('$myusername')";
$result2 = mysql_query($sql2) or die(mysql_error());

echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=Login_success">';

}
}
elseif($count==0) {
echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=Login_Unsuccessful">';
}
?>

<?php
mysql_close();
?>

Затем он перерегистрируетсяиспользуя admin/Login_name.php:, который проверяет последнее имя доступа в базе данных mysql и регистрирует его снова

<?php
/* Mysql connection */
$tbl_name="cuser"; // Table name

$query = "SELECT MAX(`id`) AS 'max' FROM $tbl_name";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$max = $row['max'];
$query1 = "SELECT * FROM $tbl_name WHERE id= '$max'";
$result1 = mysql_query($query1) or die(mysql_error());
$row1 = mysql_fetch_row($result1);

//check username
$myusername=$row1[1];

//register username
$_SESSION['myusername'] = $myusername;

?>

Проблема, с которой я столкнулся, заключается в том, что мне нужно ограничить доступ к области администратора с помощью этого:

Code:

<?php
session_start ();
    if ($_REQUEST ['module'] == 'admin' && $_REQUEST ['n'] != 'index' && $_REQUEST ['n'] != 'Login_Unsuccessful' && $_REQUEST ['n'] != 'checklogin' && $_REQUEST ['n'] != 'Logout' && $_REQUEST ['n'] != 'Login_name') {

        include ("admin/Login_name.php");
        // var_dump ( $myusername );
        //echo $myusername;
        //echo "<br />";
        //echo "<br />";
        if (isset ( $_SESSION ['myusername'] )) {
            //var_dump($myusername);
            //echo "SESSION IS SET";
            if ($_SESSION ['myusername'] == $myusername) {
                //echo "User should be allowed to be on page";
            } else {
                //echo"User not allowed";
                echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=index">';
            }

        } else {
            //var_dump(($_SESSION['myusername']));
            //echo "SESSION IS NOT SET(username not registered)";

            echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=index">';
        }
    }
    ?>

Проблема, которую я обнаружил, состоит в том, что, если администратор уже вошел в систему, человек, который еще не вошел в систему, может получить доступ к закрытым областям, но я не хочу, чтобы это произошло.

Я думаю, что это может иметь какое-то отношение к операторам if в последнем бите исходного кода, однако я не знаю.

Любые идеи?

Спасибо

PS Извините за длинный пост, единственный способ описать полностью!

Ответы [ 2 ]

1 голос
/ 19 июня 2011

Я думаю, что было бы проще проверить вход пользователя, сделав что-то вроде этого.

session_start();
if(isset($_SESSION['user']) && $_SESSION['user']['admin']){
  // let user to admin page
}else{
  // deny access
}

поэтому, когда вы обрабатываете форму, просто установите $_SESSION['user'] и установите $_SESSION['user']['admin'] в true;

Опять же, это простой метод входа в систему.

1 голос
/ 19 июня 2011

У меня есть другая идея для этого.

Вместо того, чтобы делать двойной запрос для проверки пользователей и активных пользователей, вы можете сделать это с помощью одного запроса на соединение между таблицами пользователей таблицы активных пользователей

пользователь таблицы содержит поля

  • user_id
  • user_name
  • пароль
  • и т.д ...

таблица active_users содержит поля,

  • user_id
  • login_time
  • session_id
  • и т.д ...

затем вы можете выбрать запрос на присоединение, чтобы проверить, есть ли у пользователя действительная информация от пользователей таблицы, и пользователь проверил в таблице active_users.

Тогда для зон ограниченного доступа вы можете сравнить его с пользовательскими сессиями. Если пользователи пытаются получить доступ к каким-либо страницам / областям, выполните привилегии пользователя при получении, назначенные на основе пользовательского сеанса.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...