Как защитить страницу только для зарегистрированных пользователей? - PullRequest
10 голосов
/ 25 июля 2011

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

Нужно ли размещать скрипт на самой странице успеха?

Вот мой check_login.php:

<?php
$host="localhost"; // Host name
$username="xxx"; // Mysql username
$password="xxx"; // Mysql password
$db_name="xxx"; // Database name
$tbl_name="xxx"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password") or die("cannot connect");
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);

$count=mysql_num_rows($result);

$user_info = mysql_fetch_assoc($result);

 if( isset($user_info['url']) ) {

 session_register("myusername");
 session_register("mypassword");
     header('Location: ' . $user_info['url']); //Redirects to the supplied url from the DB
 } else {
  header("location:error.htm");
 }
 ?>

Ответы [ 4 ]

8 голосов
/ 25 июля 2011

Каждая ваша страница должна начинаться с

session_start();

и вы не должны использовать session_register( "variablename" ) с PHP версии 4.2, используйте

$_SESSION["variable"] = value;

поэтому пример страницы с проверкой is-logged-it будет:

<?php
session_start();
if($_SESSION["loggedIn"] != true) {
    echo("Access denied!");
    exit();
}
echo("Enter my lord!");
?>

и сценарий входа в систему:

<?php
    /*
        ... db stuff ...
    */

if( isset($user_info['url']) ) {
    $_SESSION["loggedIn"] = true;
    $_SESSION["username"] = $myusername;
    header('Location: ' . $user_info['url']); //Redirects to the supplied url from the DB
} else {
    header("Location: error.htm");
}
?>
3 голосов
/ 25 июля 2011

На странице, требующей входа пользователя в систему, проверьте, есть ли у него действительный сеанс. Если нет, отправьте их на страницу входа.

if (!$_SESSION['myusername'])  
{  
    header('location: /login.php');  
    exit;  
}
2 голосов
/ 25 июля 2011

На каждой странице / контенте с ограниченным доступом вы должны аутентифицировать клиента / пользователя. Если бы люди были сумасшедшими, вам бы пришлось заставить пользователя указывать свои данные (имя пользователя / пароль) на каждой странице, но благодаря «HTTP-куки» - нам не нужно этого делать.

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

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

Чтобы использовать сеансы, поместите ваши функции настройки сеанса в верхнюю часть каждого PHP-скрипта внутри вашего приложения (в функции настройки входят обработчик сеанса, домен cookie и имя cookie) и произнесите session_start(). Затем проверьте, был ли установлен флаг входа в текущий сеанс, например $_SESSION["user_is_logged_in"]. На странице аутентификации вы, конечно, определите $_SESSION["user_is_logged_in"] = true; на каком-то этапе.

...