[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать перенаправление после авторизации?
ValenoK
Добрый день! есть 2 файла выполняющие функцию авторизации (листинг ниже). По поводу правильности реализованной защиты пока не заморачиваюсь, вот возник такой вопрос, как мне сделать перенаправление пользователя на необходимую страничку если level пользователя равен допустим 1 ?
auth.php

<?php
/*
Универсальный скрипт авторизации.
Используется сессии для хранения данных.
Скрипт типа "всё-в-одном" - его необходимо
включать в каждый файл для использования.
Распространяется по лицензии BSD.

+Требования:
+-Mysql & PHP5
+-Созданое подключение к MySQL и запущеная сессия =)

©2008 Vasilii B. Shpilchin
*/

##Определяем константы

define('USERS_TABLE','users');
define('SID',session_id());

##Определяем функции
//Функция выхода.
//Пользователь считается авторизированым, если в сессии присутствует uid
//см. "Действия - если пользователь авторизирован".

function logout() {
session_unregister('uid'); //Удаляем из сессии ID пользователя
die(header('Location: '.$_SERVER['PHP_SELF']));
}

//Функция входа.
//Все выбраные поля записываются в сессию.
//Таким образом, при каждом просмотре страницы не надо выбирать их заново.
//Для обновления информации из БД можно пользоваться этой же функцией - имя и пароль
//хранятся в сессиях

function login($username,$password) {
$result = mysql_query("SELECT * FROM `".USERS_TABLE."` WHERE `username`='$username' AND `password`='$password';")
or die(mysql_error());
$USER = mysql_fetch_array($result,1); //Генерирует удобный массив из результата запроса
if(!empty($USER)) { //Если массив не пустой (это значит, что пара имя/пароль верная)
$_SESSION = array_merge($_SESSION,$USER); //Добавляем массив с пользователем к массиву сессии

mysql_query("UPDATE `".USERS_TABLE."` SET `sid`='".SID."' WHERE `uid`='".$USER['uid']."';")
or die(mysql_error());
return true;
}
else {
return false;
}
}


//Функция проверки залогинности пользователя.
//При входе, ID сессии записывается в БД.
//Если ID текущей сессии и SID из БД не совпадают, производится logout.
//Благородя этому нельзя одновременно работать под одним ником с разных браузеров.

function check_user($uid) {
$result = mysql_query("SELECT `sid` FROM `".USERS_TABLE."` WHERE `uid`='$uid';") or die(mysql_error());
$sid = mysql_result($result,0);
return $sid==SID ? true : false;
}

##Действия - если пользователь авторизирован
if(isset($_SESSION['uid'])) { //Если была произведена авторизация, то в сессии есть uid

//Константу удобно проверять в любом месте скрипта

define('USER_LOGGED',true);
//Создаём удобные переменные
//Все поля таблицы пользователей записываются в сесси (см. стр. 35-37)
//Таким образом, после добавления нового поля в таблицу надо дописть лишь одну строку

$UserName = $_SESSION['username'];
$UserPass = $_SESSION['password'];
$UserID = $_SESSION['uid'];
$UserLevel = $_SESSION['level'];
$UserStatus = $_SESSION['status'];
$UserFio = $_SESSION['fio'];
}
else {
define('USER_LOGGED',false);
}

##Действия при попытке входа
if (isset($_POST['login'])) {

if(get_magic_quotes_gpc()) { //Если слеши автоматически добавляются
$_POST['user']=stripslashes($_POST['user']);
$_POST['pass']=stripslashes($_POST['pass']);
}
$user = mysql_real_escape_string($_POST['user']);
$pass = mysql_real_escape_string($_POST['pass']);
if(login($user,$pass))
{
header('Refresh: 3');
die('Вы успешно авторизировались!');
}
else {
header('Refresh: 3;');
die('Пароль неправильный!');
}

}


##Действия при попытке выхода
if(isset($_GET['logout'])) {
logout();
}
?>

login.php

<?php
session_start();
mysql_connect('localhost','***','***') or die(mysql_error());
mysql_select_db('***') or die(mysql_error());
mysql_query('SET NAMES cp1251');

include('auth.php');

if(USER_LOGGED) {
if(!check_user($UserID)) logout();
?>
<h1>Здравствуйте, <?php echo $UserFio; ?>!</h1>

<
h4><a href="?logout">Выход</a></h4>
<?php
}
else { ?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<
table>
<
tr>
<
td>Имя:</td><td><input type="text" name="user"></td>
</
tr>
<
tr>
<
td>Пароль:</td><td><input type="password" name="pass"></td>
</
tr>
<
tr>
<
td colspan="2"><input type="submit" name="login" value="Войти"></td>
</
tr>
</
table>
</
form>
<?php
}
?>

Правильно ли я предполагаю, что необходимо зделать как-то так
index.php

<?php session_start(); ?>
<?php
include('login.php'); ?>
<?php
if ((isset($_SESSION['level'])) && ($_SESSION['level']==1)) {
// здесь все содержимое страницы для пользователя чей level
// = 1

}?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.