|
|
|
| Привет всем!!!
Есть система авторизации с привилегиями.
Вот скрипт
Форма авторизации
<?php
session_start();
?>
<form action=handler.php method='post'>
<table>
<tr>
<td>имя посетителя: <input type='text' name='name' value=<?php echo $_SESSION['user']; ?>></td>
</tr>
<tr>
<td>пароль: <input type='password' name='passwd' value=<?php echo $_SESSION['password']; ?>></td>
</tr>
<tr>
<td>
<input type=submit value=Войти>
<input type=hidden name='session_id' value=<?php echo session_id(); ?>>
</td>
</tr>
</form>
<?php
//Если посетитель вошел приветствуем его
if(isset($_SESSION['user']))
{
echo "Здравствуйте, ".$_SESSION['user']."!";
}
?>
|
Обработчик
<?php
session_start();
//соединение с БД
include "config.php";
// Обработчик формы
if(!empty($_POST['name']) && !empty($_POST['passwd']))
{
//Сравниваем переданный идентификатор из формы
//с текущим идентификатором сессии
if($_POST['session_id'] != session_id())
{
echo session_id();;
exit("Попытка передачи данных с другого хоста. Скрипт остановлен.");
}
// Защищаясь от SQL-инъекции, пропускаем
// полученные пароль и логин через функцию
// mysql_escape_string
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
$_POST['passwd'] = mysql_escape_string($_POST['passwd']);
}
//Формируем и выполняем SQL-запрос имеется ли пользователь
//с именем $_POST['name']
$query = "SELECT pass=MD5('$_POST[passwd]'), statususer FROM userlist WHERE name='$_POST[name]'";
$nme = mysql_query($query);
if(!$nme) exit("Ошибка выполнения запроса");
//Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
//Идентификация прошла успешно - осуществляем
//вход посетителя
if(session_start())
{
$_SESSION['user'] = $_POST['name'];
$_SESSION['password'] = $_POST['passwd'];
//статус пользователя
$_SESSION['stat'] = mysql_result($nme,0,"statususer");
//Осуществляем переход
echo "<html><head>
<meta http-equiv='Refresh' content='0; URL=index.php'>
</head><body>";
}
else exit("Ошибка идентификации: неправильный пароль");
//Если в результате запроса не получено ни одной
//строки - посетитетль с таким именем не зарегистрирован
}
else exit("Ошибка индентификации: посетитель не зарегистрирован");
}
else exit("Error");
?>
|
и файл index.php
<?php
session_start();
if(!empty($_SESSION['user']))
{
echo "hellom, ".$_SESSION['user'];
}
if($_SESSION['stat'] == 'user')
{
echo "<br />Вы не админ";
}
elseif($_SESSION['stat'] == 'admin')
{
echo "<br />Привет админ ".$_SESSION['user'];
}
else
{
echo "Вам сюда запрещено";
}
?>
|
Вопрос в том, как лучше сделать проверку статуса пользователя? | |
|
|
|
|
|
|
|
для: Spyder
(30.11.2006 в 12:40)
| | если вы проверяете статус из админского модуля, куда могут заходить только юзеры со
статусом админа, так и выбирайте только их из базы! сессии проще подделать, чем запрос.
$query = "SELECT pass=MD5('$_POST[passwd]') FROM userlist WHERE name='$_POST[name]' AND statususer = 'admin'";
|
| |
|
|
|
|
|
|
|
для: elenaki
(30.11.2006 в 12:51)
| | Что то ни то, может я не так объяснил.
Есть сат с админкой.
На сайте пользователи авторизируются, если это админ то появляется дополнительное меню
с ссылкой в админку сайта, структура сайта:
modules
- guest
index.php - это и другие файлы будут выводится на сайте
config.php
- admin - папка в эту папку может заходить только админ
index.php -
addmessage.php
answer.php
как осуществить чтоб только админы заходили в эту папку, но авторизацию проходили один раз.
Я уже чета вообще запутался. | |
|
|
|
|
|
|
|
для: Spyder
(30.11.2006 в 13:07)
| | up | |
|
|
|
|
|
|
|
для: Spyder
(30.11.2006 в 13:36)
| | если все пользователи в одной таблице - введи доп поле тида admin - а там скажем переменую. 0 или 1 - и проверяй кто авторизировался | |
|
|
|
|
|
|
|
для: moonfox
(30.11.2006 в 13:41)
| | >если все пользователи в одной таблице - введи доп поле тида admin - а там скажем переменую. 0 или 1 - и проверяй кто авторизировался
Вот таблица user, я и так написал проверку определения статуса пользователя
id_usr int(8) auto_increment
name text
pass tinytext
email tinytext
puttime datetime
statususer enum('user', 'adm')
|
Мне не понятно как на других страницах сделать проверку?
Может кто пример привидет с доступом для определенных пользователей, как они проверяет что напр-р это адми? | |
|
|
|
|
|
|
|
для: Spyder
(30.11.2006 в 13:52)
| | во время авторизации вноси в сессию значение переменной из поля админ - при переходах по станицам как обычно запускай сесии и проверячй если переменная отвечающая за статус равна 0 то... если 1 то... | |
|
|
|
|
|
|
|
для: moonfox
(30.11.2006 в 13:58)
| | ну у меня так и сделано я хотел насколько это безопасно. | |
|
|
|
|
|
|
|
для: Spyder
(30.11.2006 в 14:08)
| | прикол..:))))))
а тему назвал как определить...
все же пашет! улыбайся! :))))))))))
можешь в куки писать еще | |
|
|
|
|
|
|
|
для: moonfox
(30.11.2006 в 14:11)
| | просто у меня были подозрения, что это делается немного подругому. А как и кого в куки писать и для чего, объясните плиз!!! | |
|
|
|
|
|
|
|
для: Spyder
(30.11.2006 в 14:17)
| | при авторизации можно использовать cookies вместо сессий - заносить туда даные о пользователе и прроверять кто он..
HTTP cookies. Cookies это механизм хранения данных броузером удаленной машины для отслеживания или идентификации возвращающихся посетителей. Вы можете установить cookies при помощи функций setcookie() или setrawcookie(). Cookies являются частью HTTP-заголовка, поэтому setcookie() должна вызываться до любого вывода данных в броузер. Это то же самое ограничение, которое имеет функция header(). Вы можете использовать функции буферизации вывода, чтобы задержать вывод результатов работы скрипта до того момента, когда будет известно, понадобится ли установка cookies или других HTTP-заголовков.
Любые cookies, отправленные серверу броузером клиента, будут автоматически преобразованы в переменные PHP, подобно данным методов GET и POST. На этот процесс влияют конфигурационные директивы register_globals и variables_order . Для назначения нескольких значений одной cookie, просто добавьте [] к её имени.
В PHP 4.1.0 и выше, глобальный массив $_COOKIE всегда автоматически заполняется значениями полученных cookies. В более ранних версиях определяется массив $HTTP_COOKIE_VARS но только когда включена директива track_vars. (Эта директива всегда включена начиная с PHP 4.0.3.)
Дополнительная информация, в том числе и об особенностях реализации броузеров, приведена в описании функций setcookie() и setrawcookie(). | |
|
|
|
|
|
|
|
для: moonfox
(30.11.2006 в 14:25)
| | Спасибо!
Я немного не так вас понял, я думал использовать cookie вместе с сессиями.
Тема закрыта | |
|
|
|