Задача: нужно сделать админку, защищенную паролем.
Как я делал:
создал папку /admin
и файл index.php, который проверял авторизирован ли пользователь
PHP |
<? session_start(); ... if (($_SESSION['logged']=='yes') && ($_SESSION['login'] == $login) && ($_SESSION['password']==$password)) { include('left.[SPAN=darling]php[/SPAN]'); } else { <form action='login.[SPAN=darling]php[/SPAN]' method='post'> <table align='center'> <tr> <td>Логин<td> <td><input type='text' name='login'><td> </tr> <tr> <td>Пароль<td> <td><input type='password' name='password'><td> </tr> <tr> <td><input type='submit' name='submit' value='OK'></td> </tr> </table> </form> }
|
содержимое файла login.php:
PHP |
<? session_start(); $query=[SPAN=darling]mysql[/SPAN]_query('SELECT * FROM admin'); $temp=[SPAN=darling]mysql[/SPAN]_fetch_array($query); $login=$temp['login']; $password=$temp['password']; $enabled=$temp['enabled']; $elogin=$_POST['login']; $epassword=$_POST['password'];
if (($login == $elogin) && ($password==$epassword)) { $_SESSION['logged']='yes'; $_SESSION['login']=$elogin; $_SESSION['password']=$epassword; header ('Location: [URL=http://localhost/admin/');]http://localhost/admin/');[/URL] } else { echo 'Авторизируйтесь'; }
|
Теперь о проблеме:
Вот я авторизировался и попал на index.php, в котором прикрепилась страница left.php с менюшкой
Нужно ли мне теперь постоянно проверять авторизирован ли пользователь или нет?
Как лучше организовать работу админки дальше?
Я сделал файл check_login.php, который постоянно проверяет авторизирован ли пользователь или нет, если авторизирован - считывается id запрашиваемой страницы и ищется в mysql
PHP |
<?
session_start();
$query=[SPAN=darling]mysql[/SPAN]_query('SELECT * FROM admin'); $temp=[SPAN=darling]mysql[/SPAN]_fetch_array($query); $login=$temp['login']; $password=$temp['password']; $enabled=$temp['enabled']; $elogin=$_POST['login']; $epassword=$_POST['password'];
$id=$_GET['id']; if(!isset($id)) { $link['link']='index.[SPAN=darling]php[/SPAN]'; } else {
$get_link=[SPAN=darling]mysql[/SPAN]_query("SELECT link FROM admin_pages WHERE id=$id"); $link=[SPAN=darling]mysql[/SPAN]_fetch_array($get_link); }
if (($_SESSION['logged']=='yes') && ($_SESSION['login'] == $login) && ($_SESSION['password']==$password)) { include ('left.[SPAN=darling]php[/SPAN]'); include ($link['link']); }
else { header ('Location: [URL=http://localhost/admin/');]http://localhost/admin/');[/URL] }
|
И еще один вопрос:
как лучше организовать переходы по ссылкам, скидывать полностью запрашиваемую страницу в БД (будь то статья или еще что-то) и затем искать ее по id или кидать каждую страницу(статью) в отдельную папку и смотреть ее адресс в БД
Если есть другой, более правельный вариант - скажите!
Спасибо!
Спустя 15 минут, 44 секунды (11.12.2008 - 11:18) FatCat написал(а):
Если для себя одного любимого, проще и эффективней защитить директори htaccess-ом.
Если все же средствами php, то проще передавать идентификатор сессии через адресную строку.
Спустя 14 минут, 17 секунд (11.12.2008 - 11:32) st90 написал(а):
А как лучше этот индификатор передавать?
http://address.ru/admin/page.php?session=adminчто-то вроде того?
и еще вопрос:
в дальнейшем возможно придется сделать систему подобную
форуму:
регистрация пользователей, которые потом смогут переписываться друг с другом, добавлять в друзья и добавлять свои фотографии
насколько сильно будет отличаться принцип
скриптов от админки?
с регистрацией думаю разберусь, а вот с авторизацией как?
на index.
php пользователь введет данные, они проверятся в login.
php , а как в след страницах удостовериться что он залогинился ?
Спасибо!
Спустя 6 минут, 44 секунды (11.12.2008 - 11:39) st90 написал(а):
Кстати по поводу админки: может с куками попробовать связать?
Спустя 1 час, 45 минут, 59 секунд (11.12.2008 - 13:25) Krist_ALL написал(а):
Код |
if (($login == $elogin) && ($password==$epassword)) |
думаю лучше будет написать === ато преобразование типов... мало ли кто чо введет в поле ввода..
Спустя 11 минут, 1 секунда (11.12.2008 - 13:36) FatCat написал(а):
Цитата (st90 @ 11.12.2008 - 11:32) |
session=admin
что-то вроде того? |
Идентификатор сессии должен быть довольно уникальный.
Хотя бы md5( time() )
Спустя 1 час, 19 минут, 4 секунды (11.12.2008 - 14:55) st90 написал(а):
индификатор==название?
как потом проверять индификатор на след страницах?
Спасибо за ответы!
Спустя 12 минут, 46 секунд (11.12.2008 - 15:08) FatCat написал(а):
Цитата (st90 @ 11.12.2008 - 14:55) |
как потом проверять индификатор на след страницах? |
Писать в БД в таблицу сессий.
Спустя 14 минут, 11 секунд (11.12.2008 - 15:22) st90 написал(а):
А кстати пароли в md5 нужно хранить? или я что-то не так понял?
а как потом индификатор сверять, если он от времени генерируется?
может тогда логин и пароль в md5?
Спустя 29 минут, 13 секунд (11.12.2008 - 15:51) gooder отдыхающий написал(а):
Спустя 17 часов, 22 минуты, 32 секунды (12.12.2008 - 09:14) st90 написал(а):
Большое спасибо за ссылку, вопросов больше нет ))
Спустя 7 месяцев, 16 дней, 13 часов, 59 минут, 51 секунда (28.07.2009 - 22:14) Guest написал(а):
gooder Это твоя реальная фотка?
Может познакомимся?
mk_sp@mail.ru
Спустя 14 часов, 48 минут, 46 секунд (29.07.2009 - 13:02) Guest написал(а):
куки при авторизации использовать намного безопаснее, чем сессиии. И все что бы не говорили про их небезопасность, сводится лишь к тому, что по окончании работы с сайтом сессия уничтожается сама, а кука остается на компьютере, и если посторонний человек сядет за ваш компьютер, то получает доступ к вашим данным.
если требуется авторизация для админки со своего домашнего компа, то никто не доберется до вашей куки, если не сядет за ваш комп, или если ваш комп не полон троянов. сделайте также кнопку "выход". она поможет почистить куки, если придется заниматься администрированием из другого места, главное не забывать ею пользоваться.
Спустя 18 дней, 3 часа, 34 минуты, 4 секунды (17.08.2009 - 16:36) G3/SG1 написал(а):
Копай в сторону HTTP-авторизации.