Система входа с использованием PHP - PullRequest
0 голосов
/ 17 июля 2011

Я новичок в PHP.Как новичок, я начал свой первый проект.Я сделал систему входа в систему для моего веб-приложения.Но есть проблема.Когда я пытаюсь получить доступ к индексу или главной странице, он запрашивает логин, но когда я пытаюсь получить доступ к какой-то другой странице, он не запрашивает у меня логин.

Как я могу управлять тем же ограничениемдля всех страниц?Мой код для входа здесь.

<?
$connection=mysql_connect("localhost","admin","");
if(!$connection)
{
    die("Database Connection Failed: " . mysql_error());
}
//Select a database to use
$db=mysql_select_db('vss',$connection);
if(!$db)
{
    die("Database Selection Failed: " . mysql_error());
}
$username=$_POST['username'];
$password=$_POST['password'];
//
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
//
$query="SELECT *FROM user where username='$username'AND password='$password'";
$result=mysql_query($query);
$count=mysql_num_rows($result);
// If result matched $username and $password,table row must be 1 row
if($count==1){
// Register $username, $password and redirect to file "example.php"
session_register("username");
session_register("password");
header("location:http://localhost/vss/main.php");
}
else {
echo "Wrong Username or Password";
}
?>

Я только что добавил: $userok=$count; после строки $count==1 Затем я добавил, я просто добавил: $ userok = $ count; после строки $ count == 1 ЗатемЯ добавил Call.php -> <?php if($userok!=1); { header("location:localhost/vss/logindo.php";); } ?> Я добавил include(call.php) в верхнюю часть ограниченных страниц. Но, когда я нажимаю кнопку каждый раз, когда она запрашивает логин. Как я могу сделать зарегистрированного пользователя, пока он не нажмет «Выход».Я добавил include (call.php) в верхнюю часть ограниченных страниц. Но, когда я нажимаю кнопку каждый раз, когда она запрашивает логин. Как я могу сделать зарегистрированного пользователя, пока он не нажмет «выход».

Ответы [ 3 ]

1 голос
/ 17 июля 2011

Я не буду обсуждать безопасность этого, так как вы учитесь.Вы можете сделать следующее: 1) под строкой if($count==1) добавить что-то вроде $userok=1; и в другой части добавить $userok=0; 2) переименовать указанный выше .php во что-то вроде init.php, 3) вверхиз всех остальных страниц сделать что-то вроде "

   include ('init.php');
   if (!($userok==1)) { 
      echo "Please do not call this directly, login first";
      exit;
   }

", вы можете заменить эхо "пожалуйста, войдите" на header("Location: http://..."), перенаправляющее на вашу страницу входа.

0 голосов
/ 17 июля 2011

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

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

И, как упоминалось в комментарии @marto, вы должны знать о возможностях SQL-инъекций в своем скрипте.Это не так сложно предотвратить .

0 голосов
/ 17 июля 2011

Обратите внимание на важные слова Марто Пожалуйста, убедитесь, что ваш sql в безопасности Я вижу, вы уже используете mysql_real_escape_string, также посмотрите на подготовленные заявления

Также как регистр sesssion УСТАРЕЛО с PHP 5.3.0. используйте только $ _SESSSION ["username"] и не нужно ставить пароль в сеансе

Когда у вас есть значения в сеансе, вы можете проверять их в верхней части каждой страницы (используйте для этого включение). Хотя я бы советовал не использовать какие-либо конкретные данные в сеансе, просто рассмотрите возможность установки чего-то вроде logged_in в качестве сеанса var

например.

if(empty($_SESSION["username"])
{
  //redirect to login
}
else
{

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