Я создал форму входа, которая отлично работает. Но я понял, что страница, к которой обращается мой пользователь, все равно может быть доступна любому. Как защитить доступ к странице, которую можно просмотреть только для зарегистрированных пользователей?
Мне нужно разместить сценарий на странице успеха?
Вот мой 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"); } ?>
Каждая ваша страница должна начинаться с
session_start();
и вы не должны использовать session_register( "variablename" )
с PHP версии 4.2, используйте
$_SESSION["variable"] = value;
поэтому пример страницы с занесенной в журнал-проверкой будет:
<?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"); } ?>
На странице, которая требует, чтобы пользователь регистрировался, чтобы проверить, есть ли у них действительный сеанс. Если не отправить их на страницу входа в систему.
if (!$_SESSION['myusername']) { header('location: /login.php'); exit; }
На каждой странице / контенте с ограниченным доступом вы должны аутентифицировать клиента / пользователя. Если люди были сумасшедшими, тогда вам нужно будет заполнить его данные (имя пользователя / пароль) на каждой странице, но благодаря «HTTP-файлам cookie» – нам не нужно это делать.
В основном вы должны использовать управление сеансом для отслеживания того, находится ли пользователь в сеансе аутентификации или нет. Если нет, вы (re) направляете их на индексную страницу; если да, вы предоставляете им доступ к любому ресурсу, который они запрашивали.
Чтобы использовать сеансы, поместите свои функции настройки сеанса в начало каждого скрипта PHP внутри вашего приложения (функции настройки включают обработчик сеанса, домен cookie и имя файла cookie) и говорят session_start()
. Затем проверьте, был ли флаг входа определен в текущем сеансе, например $_SESSION["user_is_logged_in"]
. На странице аутентификации вы, конечно, определите $_SESSION["user_is_logged_in"] = true;
на каком-то этапе.