Спустя 22 минуты, 7 секунд (3.04.2011 - 12:38) quickxyan написал(а):
ну куки хэширует по md5 пароль
Спустя 30 минут, 2 секунды (3.04.2011 - 13:08) m4a1fox написал(а):
quickxyan
А так можно? Ну к примеру setcookie("pass", md5(пароль))? так что ли получается?
А так можно? Ну к примеру setcookie("pass", md5(пароль))? так что ли получается?
Спустя 6 минут, 55 секунд (3.04.2011 - 13:15) quickxyan написал(а):
ну да. я затупил - думал, что он сам шифрует в мд5. да именно так и надо
Спустя 1 минута, 2 секунды (3.04.2011 - 13:16) m4a1fox написал(а):
quickxyan
Ага! Ясненько. Сейчас буду экспериментировать.
Ага! Ясненько. Сейчас буду экспериментировать.
Спустя 1 минута, 42 секунды (3.04.2011 - 13:18) m4a1fox написал(а):
quickxyan
Да. Сработало. Спасибо.
Да. Сработало. Спасибо.
Спустя 21 минута, 41 секунда (3.04.2011 - 13:39) m4a1fox написал(а):
еще вопрос. Я сделал структуру таким образом. Создал папку log в ней есть index с проверкой логина и пароля, далее в ней же есть cookie и в ней же создается session. При открытии админки, если нет ыуыышщт то идёт перенаправление на папку log. Хочется сделать так, что бы если есть cookie с паролем и логином (а они есть!) то при открытии index в админке, не было редиректа на папку log.
Спустя 12 минут, 56 секунд (3.04.2011 - 13:52) m4a1fox написал(а):
Реально где то запутался в коде.
Спустя 3 минуты, 40 секунд (3.04.2011 - 13:56) m4a1fox написал(а):
Почему то если проверяю на странице сущ cookie вот таким способом [php]if(isset($_COOKIE['login']) && isset($_COOKIE['password'])) то ничего не происходит. Подскажите кто знает. Спасибо.
Спустя 8 минут, 34 секунды (3.04.2011 - 14:05) m4a1fox написал(а):
Черт. Ни как не получается проверить на сущ cookie.
Спустя 6 минут, 50 секунд (3.04.2011 - 14:11) RAZZOR написал(а):
Вобще условие написано правильно. Вот только функция isset() может принимать несколько аргументов. Лучше сделать так:
А вобще, напиши этот кусок кода и что у тебя висит в куках на момент проверки
if ( isset($_COOKIE['login'], $_COOKIE['password']) )
А вобще, напиши этот кусок кода и что у тебя висит в куках на момент проверки
Спустя 1 минута, 37 секунд (3.04.2011 - 14:13) m4a1fox написал(а):
Другое ) как передать cookie на другую страницу?
Спустя 2 минуты, 27 секунд (3.04.2011 - 14:15) RAZZOR написал(а):
Куки хранятся в браузере у конкрентого пользователя, а не на странице. Т.е. они доступны на всех страницах данного сайта
Спустя 47 секунд (3.04.2011 - 14:16) m4a1fox написал(а):
RAZZOR
Вот и я так думаю. Сейчас кусок кода скину.
Вот и я так думаю. Сейчас кусок кода скину.
Спустя 7 минут, 58 секунд (3.04.2011 - 14:24) m4a1fox написал(а):
Вот это код отвечает за ввод логина и пароля
Вот этот код проверяет, если есть cookie то идет проверка и если норм и проверка прошла то перенаправляем.
код выше находится по пути http://www.sitename.ru/admin/log/index.php
Но есть еще и страница http://www.sitename.ru/admin/index.php
Вот собственно хочется сделать на ней прогверку, если cookie есть, то все хорошо, на ней и остаемся, а если нет - то переадрессовываем на log/index.php. Где собственно и есть форма для ввода логина и пароля.
if(isset ($_POST['login']))
{
$name = (isset ($_POST['name'])) ? $_POST['name'] : '';
$password = (isset ($_POST['password'])) ? md5($_POST['password']) : '';
$result = mysql_query("SELECT COUNT(*) AS `cnt` FROM `table1`
WHERE user='". mysql_real_escape_string($name) ."'
AND password='". $password ."'"
);
if (mysql_result($result, 0) == 0)
{
$ok = 'Нет такой!!!';
}
else
{
setcookie("auth", "$name", time()+3600);
setcookie("pass", "$password", time()+3600);
$_SESSION['ok'] = $name;
$ok = 'Есть такой!!!';
header('Refresh: 2; url=../index.php');
}
}
Вот этот код проверяет, если есть cookie то идет проверка и если норм и проверка прошла то перенаправляем.
if (isset($_COOKIE['auth']) && isset($_COOKIE['pass']))
{
$name = mysql_real_escape_string($_COOKIE['auth']);
$password = mysql_real_escape_string($_COOKIE['pass']);
$result = mysql_query("SELECT COUNT(*) AS `cnt` FROM `adminc`
WHERE user='". mysql_real_escape_string($name) ."'
AND password='". $password ."'"
);
//$ok = (mysql_result($result, 0) == 0) ? 'Нет такого!' : 'Есть такой';
if (mysql_result($result, 0) == 0)
{
$ok = 'Нет такой!!!';
}
else
{
//$ok = 'Все норм. Ты прошел проверку.';
header('Refresh: 0; url=../index.php');
$_SESSION['ok'] = $name;
}
}
код выше находится по пути http://www.sitename.ru/admin/log/index.php
Но есть еще и страница http://www.sitename.ru/admin/index.php
Вот собственно хочется сделать на ней прогверку, если cookie есть, то все хорошо, на ней и остаемся, а если нет - то переадрессовываем на log/index.php. Где собственно и есть форма для ввода логина и пароля.
Спустя 6 минут, 9 секунд (3.04.2011 - 14:30) RAZZOR написал(а):
Так а в чём собственно проблема?
Спустя 1 минута, 48 секунд (3.04.2011 - 14:32) m4a1fox написал(а):
Проблема в том, что страница http://www.sitename.ru/admin/index.php я не могу на нее сделать проверку cookie.
Спустя 4 минуты, 18 секунд (3.04.2011 - 14:36) m4a1fox написал(а):
Смотрите, как я понимаю систему авторизации в админ панели.
1. Если введен адресс http://www.sitename.ru/admin/index.php, и нет cookie с логином и паролем, то переадресовываем на http://www.sitename.ru/admin/log/index.php
2. Вводим логин и пароль.
3. Создать cookie с логином и паролем.
4. Если хочется выйти - выходим и удаляем cookie.
5. Если я просто закрываю браузер, то cookie сохраняются, и при следующем обращении к http://www.sitename.ru/admin/index.php, проверяется на наличии cookie и если есть то вот это http://www.sitename.ru/admin/log/index.php пропускаем а попадаем сразу на http://www.sitename.ru/admin/index.php.
Вот собственно проблема в 5 пункте.
1. Если введен адресс http://www.sitename.ru/admin/index.php, и нет cookie с логином и паролем, то переадресовываем на http://www.sitename.ru/admin/log/index.php
2. Вводим логин и пароль.
3. Создать cookie с логином и паролем.
4. Если хочется выйти - выходим и удаляем cookie.
5. Если я просто закрываю браузер, то cookie сохраняются, и при следующем обращении к http://www.sitename.ru/admin/index.php, проверяется на наличии cookie и если есть то вот это http://www.sitename.ru/admin/log/index.php пропускаем а попадаем сразу на http://www.sitename.ru/admin/index.php.
Вот собственно проблема в 5 пункте.
Спустя 4 минуты, 24 секунды (3.04.2011 - 14:41) RAZZOR написал(а):
Так а куки в браузере вобще прописываются?
Спустя 2 минуты, 20 секунд (3.04.2011 - 14:43) RAZZOR написал(а):
Цитата |
Смотрите, как я понимаю систему авторизации в админ панели |
На самом деле, описанный вами вариант, не самый лучший в плане безопасности
Спустя 7 минут, 30 секунд (3.04.2011 - 14:51) m4a1fox написал(а):
Цитата |
Так а куки в браузере вобще прописываются? |
Да! Они существуют.
Цитата |
На самом деле, описанный вами вариант, не самый лучший в плане безопасности |
да, я знаю. Просто хочется что бы стало понятно. вообще у меня другая система авторизации.
Спустя 5 минут, 25 секунд (3.04.2011 - 14:56) RAZZOR написал(а):
У вас в первом листинге скримт дёргает логин-пароль из table1, а во второй раз - из adminc. Это так и задумано, или что?
Спустя 3 минуты, 3 секунды (3.04.2011 - 14:59) m4a1fox написал(а):
RAZZOR
Да нет. Там adminc везде. Это я тупанул. понимаете, я не могу понять, как мне на index странице в админке, проверять на существование cookie, если есть то все нормально а иначе перенаправлять в папку log.
Да нет. Там adminc везде. Это я тупанул. понимаете, я не могу понять, как мне на index странице в админке, проверять на существование cookie, если есть то все нормально а иначе перенаправлять в папку log.
Спустя 6 минут, 26 секунд (3.04.2011 - 15:06) RAZZOR написал(а):
В общем пропишите внутри ифа, который проверяет на наличие кук что-нибудь вроде
И если выведет, то куки работают исправно и надо разбираться с MySQL запросом. Выводите на экран, что именно он возвращает и разбирайтесь. А ещё, я бы советовал делать редирект при помощи
Именно с die(); в конце. Ибо пользователь уже ушел и серверу незачем дальше работать впустую
echo 'cookies working';
И если выведет, то куки работают исправно и надо разбираться с MySQL запросом. Выводите на экран, что именно он возвращает и разбирайтесь. А ещё, я бы советовал делать редирект при помощи
header("Location: index.php");
die();
Именно с die(); в конце. Ибо пользователь уже ушел и серверу незачем дальше работать впустую
Спустя 3 минуты, 49 секунд (3.04.2011 - 15:09) RAZZOR написал(а):
Цитата |
Понимаете, я не могу понять, как мне на index странице в админке, проверять на существование cookie |
Так вы правильно всё делаете. При помощи if и isset. Если у вас не редиректит как надо, то проблема наверняка в последующем запросе. Напихайте там везде echo, а потом наблюдайте на каком этапе скрипт ведёт себя не так, как вы предполагали
Спустя 3 минуты, 41 секунда (3.04.2011 - 15:13) m4a1fox написал(а):
RAZZOR
Еще уточнение. Если я вывожу на index странице adminки вот это
то ничего не происходит.
А если на странице в папке log эта же надпись нормально работает!
Еще уточнение. Если я вывожу на index странице adminки вот это
echo $_COOKIE['auth'];
то ничего не происходит.
А если на странице в папке log эта же надпись нормально работает!
Спустя 7 минут, 38 секунд (3.04.2011 - 15:21) RAZZOR написал(а):
Если бы $_COOKIE['auth'] не существовало, то должен был бы появиться ворнинг (У вас показ ошибок вобще включён на сервере?). А раз его нету, то может быть проблема в том, что выводит, да не там, где вы ожидаете. Или белым цветом на белом фоне. Или скрипт вобще до этого места не доходит из-за какого-нибудь if-else. Или ещё чего. Или опять таки у вас выключено отображение ошибок, но я понятия не имею, как тогда можно заниматься дебаггингом. Всё-равно, что на кофейной гуще гадать
Спустя 5 минут, 57 секунд (3.04.2011 - 15:27) neadekvat написал(а):
Цитата (RAZZOR @ 3.04.2011 - 15:21) |
то должен был бы появиться ворнинг |
Нотайс.
Автору: сделайте print_r($_COOKIE);
Спустя 2 минуты, 2 секунды (3.04.2011 - 15:29) m4a1fox написал(а):
RAZZOR
Ладно. Спасибо все равно вам. Буду разбираться.
Ладно. Спасибо все равно вам. Буду разбираться.
Спустя 5 минут, 50 секунд (3.04.2011 - 15:34) m4a1fox написал(а):
neadekvat
Есть такое дело.
Есть такое дело.
Спустя 58 секунд (3.04.2011 - 15:35) m4a1fox написал(а):
Ха. Есть ошибочка.
Спустя 2 минуты, 12 секунд (3.04.2011 - 15:38) m4a1fox написал(а):
Почему то index странице в админке. Есть только [PHPSESSID]. А на странице index в папке log Есть и [auth] и [pass] и [PHPSESSID].
Спустя 1 минута, 35 секунд (3.04.2011 - 15:39) neadekvat написал(а):
В setcookie(); добавляйте 4й параметр:
Как оно там будет?
Кстати, оставлять только логин и пароль в кукисах ни в коем случаи нельзя. Это, можно сказать, дырка: входи, не хочу.
setcookie("pass", "$password", time()+3600, '/');
Как оно там будет?
Кстати, оставлять только логин и пароль в кукисах ни в коем случаи нельзя. Это, можно сказать, дырка: входи, не хочу.
Спустя 4 минуты, 54 секунды (3.04.2011 - 15:44) m4a1fox написал(а):
neadekvat
Цитата |
setcookie("pass", "$password", time()+3600, '/'); |
не помогло.
Спустя 3 минуты, 16 секунд (3.04.2011 - 15:47) neadekvat написал(а):
Цитата (m4a1fox @ 3.04.2011 - 15:44) |
не помогло. |
А если удалить старые кукисы и сессию и по-новой попробовать?
Спустя 31 секунда (3.04.2011 - 15:48) m4a1fox написал(а):
На сессиях все работает.
Спустя 2 минуты, 53 секунды (3.04.2011 - 15:51) m4a1fox написал(а):
neadekvat
Цитата |
А если удалить старые кукисы и сессию и по-новой попробовать? |
Да так сработало. Объясните?
Спустя 38 секунд (3.04.2011 - 15:51) neadekvat написал(а):
Цитата (m4a1fox @ 3.04.2011 - 15:51) |
Объясните? |
Какое слово в описании функции не понятно?
Спустя 5 минут, 48 секунд (3.04.2011 - 15:57) m4a1fox написал(а):
neadekvat
Нет! Со словами все норм. Почему так получилось? Пока не удалил, то все не работало. Кстати. Уничтожать cookie - в моем случае
Так или нет?
Нет! Со словами все норм. Почему так получилось? Пока не удалил, то все не работало. Кстати. Уничтожать cookie - в моем случае
setcookie("auth", "");
setcookie("path", "");
Так или нет?
Спустя 3 минуты, 37 секунд (3.04.2011 - 16:01) neadekvat написал(а):
Мысли есть, но озвучивать не буду - там несколько нюансов есть, не могу расписывать.
Цитата (m4a1fox @ 3.04.2011 - 15:57) |
etcookie("auth", ""); setcookie("path", ""); |
Лучше также, как и ставить - с 4м параметром, пустым значением и отрицательным временем.
Спустя 2 минуты, 21 секунда (3.04.2011 - 16:03) m4a1fox написал(а):
neadekvat
Цитата |
отрицательным временем. |
Это что типо этого
setcookie("auth", "", time() - 60, '/');
Спустя 2 минуты, 54 секунды (3.04.2011 - 16:06) neadekvat написал(а):
Цитата (m4a1fox @ 3.04.2011 - 16:03) |
Это что типо этого |
Верно.
Конечно, я имел в виду прошедшее время, а не отрицательное.
Спустя 20 минут, 21 секунда (3.04.2011 - 16:26) m4a1fox написал(а):
neadekvat
Спасибо что помогли. Как я понимаю безопасность такого метода это отдельная тема?
Спасибо что помогли. Как я понимаю безопасность такого метода это отдельная тема?
Спустя 1 минута, 20 секунд (3.04.2011 - 16:28) neadekvat написал(а):
Цитата (m4a1fox @ 3.04.2011 - 16:26) |
Как я понимаю безопасность такого метода это отдельная тема? |
Вкратце - безопасность на нуле. Угнал кукис - и все, ты админ.
Спустя 5 минут, 14 секунд (3.04.2011 - 16:33) m4a1fox написал(а):
neadekvat
Ну да. Это факт. Я использую вот эту авторизацию тут. номер 2!
Ну да. Это факт. Я использую вот эту авторизацию тут. номер 2!
Спустя 8 минут, 38 секунд (3.04.2011 - 16:42) neadekvat написал(а):
m4a1fox, там нет упоминаний о кукисах. Без них авторизация вполне надежна. Кроме одного - кажется, чтобы "выйти" придется перезапустить браузер.
Спустя 3 минуты, 9 секунд (3.04.2011 - 16:45) m4a1fox написал(а):
neadekvat
Во-во! Это вы точно подметили. Собственно как с этим бороться наверно никто не знает. Поэтому сегодня и пытался сделать авторизацию на cookie что бы можно было сделать выход.
Во-во! Это вы точно подметили. Собственно как с этим бороться наверно никто не знает. Поэтому сегодня и пытался сделать авторизацию на cookie что бы можно было сделать выход.
Спустя 2 минуты, 6 секунд (3.04.2011 - 16:47) m4a1fox написал(а):
neadekvat
Попытался. С Вашей помощью - получилось. Но придется отказаться. А может вы знаете где про это можно толково почитать?
Попытался. С Вашей помощью - получилось. Но придется отказаться. А может вы знаете где про это можно толково почитать?
Спустя 6 минут, 27 секунд (3.04.2011 - 16:53) neadekvat написал(а):
Цитата (m4a1fox @ 3.04.2011 - 16:45) |
Собственно как с этим бороться наверно никто не знает. |
С этим не надо бороться, просто другие методы авторизации использовать.
Почитать.. не знаю, под рукой такой литературы. В свое время раз писят переписывал код под этот процесс.
Помучайте Гугл, статей все-таки хватает. Просто к ним с умом надо - только полезное извлекать.
Спустя 2 минуты, 24 секунды (3.04.2011 - 16:56) m4a1fox написал(а):
neadekvat
Может что то посоветуете. По поводу возможности выхода из админки?
Может что то посоветуете. По поводу возможности выхода из админки?
Спустя 15 минут, 17 секунд (3.04.2011 - 17:11) neadekvat написал(а):
Цитата (m4a1fox @ 3.04.2011 - 16:56) |
Может что то посоветуете. По поводу возможности выхода из админки? |
Делай на обычных сессиях. А выход:
session_destroy();
Спустя 3 часа, 34 минуты, 37 секунд (3.04.2011 - 20:46) killer8080 написал(а):
Никогда не храните пароли, ни в каком виде в куках!!!
Это огромная дыра в безопасности!
В куках должен быть только id сессии и не более.
Это огромная дыра в безопасности!
В куках должен быть только id сессии и не более.
Спустя 14 минут, 35 секунд (3.04.2011 - 21:00) neadekvat написал(а):
Цитата (killer8080 @ 3.04.2011 - 20:46) |
В куках должен быть только id сессии и не более. |
И это вся информация, которую можно хранить в куках, по вашему?
Спустя 45 минут, 44 секунды (3.04.2011 - 21:46) killer8080 написал(а):
Цитата (neadekvat @ 3.04.2011 - 20:00) |
И это вся информация, которую можно хранить в куках, по вашему? |
Конечно нет. Хранить можно то, что не угрожает безопасности, и уж точно не пароль.
Спустя 20 минут, 30 секунд (3.04.2011 - 22:06) m4a1fox написал(а):
neadekvat
Да, на сессиях можно. Но жаль что если закрыть браузер, а потом открыть, то придется заново вводить пароль...
Да, на сессиях можно. Но жаль что если закрыть браузер, а потом открыть, то придется заново вводить пароль...
Спустя 20 минут, 46 секунд (3.04.2011 - 22:27) neadekvat написал(а):
Цитата (m4a1fox @ 3.04.2011 - 22:06) |
Но жаль что если закрыть браузер, а потом открыть, то придется заново вводить пароль... |
Функция автологина осуществляется с помощью кукисов. Записываете в базу id пользователя, уникальный хэш и еще что-нибудь.. Но по факту, автологин очень небезопасная вещь, т.к. при желании можно создать такие же условия, как у жертвы, у которой стырили кукисы.
Надежнее привязка к ip адресу. Но у многих ip динамический.
Спустя 5 минут, 22 секунды (3.04.2011 - 22:33) m4a1fox написал(а):
neadekvat
Цитата |
Но у многих ip динамический. |
Это да.
А если привязать к PHPSESSID?
Как нибудь?
Правда еще не знаю как... надо хоть прочитать про этого зверя...
Спустя 3 минуты, 1 секунда (3.04.2011 - 22:36) neadekvat написал(а):
Цитата (m4a1fox @ 3.04.2011 - 22:33) |
А если привязать к PHPSESSID? |
Он минут через 25 исчезает. К тому же, ситуация ни чем не лучше, чем с паролями, получается.
Спустя 2 минуты, 48 секунд (3.04.2011 - 22:38) m4a1fox написал(а):
neadekvat
Ага! Ясно! Значит делать все на session. Уже все варианты перепробывал.)
Ага! Ясно! Значит делать все на session. Уже все варианты перепробывал.)
Спустя 2 минуты, 10 секунд (3.04.2011 - 22:41) m4a1fox написал(а):
neadekvat
Можно еще у Вас спросить, чуток не по теме?
Можно еще у Вас спросить, чуток не по теме?
Спустя 3 минуты, 1 секунда (3.04.2011 - 22:44) m4a1fox написал(а):
Просто хочу что бы Вы как эксперт чуть подсказали по логике.
Спустя 13 секунд (3.04.2011 - 22:44) neadekvat написал(а):
Мне кажется, вы чего-то не понимаете. Ну, или я не понимаю того, что вы говорите.
Сессии - это файлы, которые хранятся на сервере. Для каждой сессии - свой файл. Вот пример содержания:
Т.е. это та информация, которую вы в сессии и храните.
А PHPSESSID - это идентификатор сессии. Обычно он хранится в куках. Именно по нему php и узнает, что за пользователь это и какими данными надо наполнить массив $_SESSION и из какого файла.
Т.е. сессии и кука PHPSESSID связаны напрямую. Нет PHPSESSID - нет сессии.
P.S.
Я не являюсь экспертом.
Сессии - это файлы, которые хранятся на сервере. Для каждой сессии - свой файл. Вот пример содержания:
user_id|s:1:"5";user_ip|s:9:"127.0.0.1";
Т.е. это та информация, которую вы в сессии и храните.
А PHPSESSID - это идентификатор сессии. Обычно он хранится в куках. Именно по нему php и узнает, что за пользователь это и какими данными надо наполнить массив $_SESSION и из какого файла.
Т.е. сессии и кука PHPSESSID связаны напрямую. Нет PHPSESSID - нет сессии.
P.S.
Я не являюсь экспертом.
Спустя 3 минуты, 42 секунды (3.04.2011 - 22:48) m4a1fox написал(а):
neadekvat
Цитата |
Я не являюсь экспертом. |
Ну это просто в статусе не отображается... а так.
И да. Про сессии я понял...
Куки - нет, сессия - да.
И все таки вопрос. Может вы поправите структуру...
Спустя 1 минута, 56 секунд (3.04.2011 - 22:49) neadekvat написал(а):
Вам именно автологин нужен или пока что решили разобраться с обычной авторизацией?
Спустя 1 минута, 12 секунд (3.04.2011 - 22:51) m4a1fox написал(а):
Есть админ панель. Досту к ней - http://www.sitename.ru/admin/index.php.
Хочу отказаться от index.php. А создать файл например login.php. Разместить его в директории http://www.sitename.ru/login.php. И если все нормально то перенаправляем на определенный файл, например content.php в папке http://www.sitename.ru/damin/content.php. Как думаете так можно делать?
Хочу отказаться от index.php. А создать файл например login.php. Разместить его в директории http://www.sitename.ru/login.php. И если все нормально то перенаправляем на определенный файл, например content.php в папке http://www.sitename.ru/damin/content.php. Как думаете так можно делать?
Спустя 50 секунд (3.04.2011 - 22:51) m4a1fox написал(а):
neadekvat
Цитата |
Вам именно автологин нужен или пока что решили разобраться с обычной авторизацией? |
Решил на обычной построить...
Спустя 2 минуты, 20 секунд (3.04.2011 - 22:54) m4a1fox написал(а):
neadekvat
Только вот проблемка, как перенаправлять на файл login.php если я ввожу в строке браузера http://www.sitename.ru/admin/?
Только вот проблемка, как перенаправлять на файл login.php если я ввожу в строке браузера http://www.sitename.ru/admin/?
Спустя 6 минут, 22 секунды (3.04.2011 - 23:00) m4a1fox написал(а):
В.htaccess не получилось.... жаль идея была ничего...
Спустя 2 минуты, 23 секунды (3.04.2011 - 23:03) neadekvat написал(а):
Я не буду описывать формы авторизации (на самом деле аутентификации), проверки паролей и т.д.
Допустим, что логин и пароль соответствуют действительности, т.е. такая связка есть в бд (или в файле - смотря где хранятся логины и пароли пользователе) - пользователь существует.
Теперь можно добавить, например, такие поля в сессию (потому что эти значения пользователь изменить не может): user_id, user_agent (браузер), user_ip. Не забудьте перед этими операциями начать сессию (session_start()).
Далее от вас требуется только в каждой странице стартовать сессию и проверять значения сессионных переменных (тех, которые вы сохранили при авторизации, теперь они в _SESSION) и фактических (которые хранятся в _SERVER). Если все совпадает - считаем, что пользователь авторизован и предоставляем ему какие-то привилегии. Если не совпадает - значит просим еще раз пройти аутентификацию.
Описанное в предыдщем обзаце можно выделить в отдельный файл и подключать в начале других исполняющих файлов.
Сразу поясню, в чем разница:
аутентификация - грубо говоря, проверка логина и пароля. Т.е. мы узнаем, есть ли у человека в принципе доступ;
авторизация - это присвоение человеку, прошедшему доступ (или гостю), своих привилегий. Например, гости могут только читать, а админ - делать, что хочет.
Допустим, что логин и пароль соответствуют действительности, т.е. такая связка есть в бд (или в файле - смотря где хранятся логины и пароли пользователе) - пользователь существует.
Теперь можно добавить, например, такие поля в сессию (потому что эти значения пользователь изменить не может): user_id, user_agent (браузер), user_ip. Не забудьте перед этими операциями начать сессию (session_start()).
Далее от вас требуется только в каждой странице стартовать сессию и проверять значения сессионных переменных (тех, которые вы сохранили при авторизации, теперь они в _SESSION) и фактических (которые хранятся в _SERVER). Если все совпадает - считаем, что пользователь авторизован и предоставляем ему какие-то привилегии. Если не совпадает - значит просим еще раз пройти аутентификацию.
Описанное в предыдщем обзаце можно выделить в отдельный файл и подключать в начале других исполняющих файлов.
Сразу поясню, в чем разница:
аутентификация - грубо говоря, проверка логина и пароля. Т.е. мы узнаем, есть ли у человека в принципе доступ;
авторизация - это присвоение человеку, прошедшему доступ (или гостю), своих привилегий. Например, гости могут только читать, а админ - делать, что хочет.
Спустя 3 минуты, 14 секунд (3.04.2011 - 23:06) m4a1fox написал(а):
neadekvat
Ясно. Значит аунтификации... так как мне переадресовывать с http://www.sitename.ru/admin на http://www.sitename.ru/login.php при условии что в.htaccess не получается. Делаю так
Ясно. Значит аунтификации... так как мне переадресовывать с http://www.sitename.ru/admin на http://www.sitename.ru/login.php при условии что в.htaccess не получается. Делаю так
Redirect /admin/ http://www.sitename.ru/login.php
Спустя 3 минуты, 37 секунд (3.04.2011 - 23:09) m4a1fox написал(а):
При условии что в папке админ нет index файла, а в настройках.htaccess есть вот это
Options -Indexes
Спустя 1 минута, 35 секунд (3.04.2011 - 23:11) neadekvat написал(а):
В файле авторизации введите какую-нибудь переменную или константу, обозначающую успешную или неуспешную аутентификацию. Допустим, AUTH.
Затем в индексном файле админки пишите
Затем в индексном файле админки пишите
if ( ! AUTH) {
header('location: '. http://www.sitename.ru/login.php);
die;
}
Спустя 2 минуты, 30 секунд (3.04.2011 - 23:14) m4a1fox написал(а):
neadekvat
Вариант! сейчас буду пробовать!
Вариант! сейчас буду пробовать!
Спустя 3 минуты, 47 секунд (3.04.2011 - 23:17) neadekvat написал(а):
Капец я седня..
if ( ! AUTH) {
header('location: http://www.sitename.ru/login.php');
die;
}
Спустя 19 минут, 21 секунда (3.04.2011 - 23:37) m4a1fox написал(а):
Но ведь я тоже самое могу делать и с проверкой на session.
Спустя 2 минуты, 5 секунд (3.04.2011 - 23:39) neadekvat написал(а):
Цитата (m4a1fox @ 4.04.2011 - 00:37) |
Но ведь я тоже самое могу делать и с проверкой на session. |
Да, но там надо проверить три значения (user_id, user_agent, user_ip), ну или два (без user_id), однако ведь проще проверить однажды и ввести некий флаг, чем постоянно обращаться к сессионным значениям и значениям окружения (_SERVER)
Спустя 16 минут, 16 секунд (3.04.2011 - 23:55) m4a1fox написал(а):
neadekvat
Согласен.
Подскажите пожалуйста, в чем разница
и
насколько я заметил, второй вариант как бы быстрее....
Согласен.
Подскажите пожалуйста, в чем разница
header('Refresh: 0; url = ../index.php');
и
header('Location: ../index.php');
насколько я заметил, второй вариант как бы быстрее....
Спустя 3 минуты, 47 секунд (3.04.2011 - 23:59) neadekvat написал(а):
Location в rfc есть, а Refresh я встречал только в тэге meta, так что рекомендую пользоваться моим способом.
Спустя 3 минуты, 59 секунд (4.04.2011 - 00:03) m4a1fox написал(а):
neadekvat
Ага! Понятно. Взял на заметку. Спасибо.
И насчет сессий.
В общем я сделал так. Если введен логин и пароль, и они успешно прошли проверку, то создаю сессию с именем. Потом проверяю на сущ. эту сессию на страницах. Вот так получилось.
Ага! Понятно. Взял на заметку. Спасибо.
И насчет сессий.
В общем я сделал так. Если введен логин и пароль, и они успешно прошли проверку, то создаю сессию с именем. Потом проверяю на сущ. эту сессию на страницах. Вот так получилось.
Спустя 2 минуты, 6 секунд (4.04.2011 - 00:05) neadekvat написал(а):
Цитата (m4a1fox @ 4.04.2011 - 01:03) |
В общем я сделал так. Если введен логин и пароль, и они успешно прошли проверку, то создаю сессию с именем. Потом проверяю на сущ. эту сессию на страницах. Вот так получилось. |
Без кода не пойму :)
Спустя 3 минуты, 22 секунды (4.04.2011 - 00:08) m4a1fox написал(а):
neadekvat
А! Секунду извините)
А! Секунду извините)
Спустя 3 минуты, 57 секунд (4.04.2011 - 00:12) m4a1fox написал(а):
Вот аунтификация
А потом вот это
проверяю на страницах.
Тут исполняемы код всей странице
ну и закрываем тег
if(isset ($_POST['login']))
{
$name = (isset ($_POST['name'])) ? $_POST['name'] : '';
$password = (isset ($_POST['password'])) ? md5($_POST['password']) : '';
$result = mysql_query("SELECT COUNT(*) AS `cnt` FROM `adminc`
WHERE user='". mysql_real_escape_string($name) ."'
AND password='". $password ."'"
);
if (mysql_result($result, 0) == 0)
{
$ok = '<font color="red">Неверный логин или пароль</font>';
}
else
{
$_SESSION['ok'] = $name;
header('Location: ../index.php');
die ();
}
}
А потом вот это
$_SESSION['ok'] = $name;
проверяю на страницах.
if (!isset ($_SESSION['ok']))
{
header ('Location:../log/');
}
else
{
Тут исполняемы код всей странице
ну и закрываем тег
<?}?>
Спустя 9 часов, 58 минут, 35 секунд (4.04.2011 - 10:11) neadekvat написал(а):
Цитата (m4a1fox @ 4.04.2011 - 01:12) |
аунтификация |
Аутентификация :)
По коду.
Не увидел session_start(), но я думаю, вы просто не показали его.
Не ставьте лишних скобок (и обычный и фигурных):
$name = isset ($_POST['name']) ? $_POST['name'] : '';
В тернарном операторе скобки ставьте только для очевидности:
$var = ($a == $b) ? 1 : 0;
$var = ($a == ($b || $c)) ? 1 : 0;
if (!isset ($_SESSION['ok']))
{
header ('Location:../log/');
}
else
{
// код страницы
}
Это тоже избыточность. Можно проще:
if (!isset ($_SESSION['ok']))
{
header ('Location:../log/');
die;
}
// код страницы
Спустя 1 час, 16 минут, 22 секунды (4.04.2011 - 11:27) m4a1fox написал(а):
neadekvat
Спасибо. Исправляю.
Спасибо. Исправляю.