[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: авторизация.. нужна помощь
nixon03
Подскажите пожалуйста, как устроена авторизация , например, "вконтакте" ?
Я так понимаю, что существует шаблон, общей для всех, страницы, который после авторизации заполняется контентом, принадлежащем авторизованному пользователю.
Как это всё просиходит? Помогите разобраться пожалуйста. Заранее спасибо.



Спустя 14 часов, 18 минут, 1 секунда (27.04.2011 - 09:08) UnWind написал(а):
Всё на самом деле очень просто.
Создается Cookie у пользователя (например: user_login и user_password)

setcookie('user_login', 'root', time+(60*60));
setcookie('user_pass', 'root', time+(60*60));

В данном примере cookie будет существовать у пользователя 60 минут (1 час), после чего удалится и произойдет так сказать автоматический выход с защищенной страницы.

Для получения значений cookie, используются переменные

$_COOKIE['user_login']
$_COOKIE['user_password']


Во время того, пока существует cookie - при переходе пользователя по страницам сайта, скрипт время от времени проверяет его существование (Например при помощи функции empty/isset), соответсвенно если cookie существует и логин и пароль верны - пользователь авторизирован.

Для выхода пользователя с сайта добровольно (Удаление cookie), используется

setcookie('user_login', 0);
setcookie('user_pass', 0);


Пример банален, но надеюсь объяснил понятно :)

P.S.:> Не забывай только пароль хранить в md5

Спустя 26 минут, 29 секунд (27.04.2011 - 09:35) UnWind написал(а):
Под рукой apache не было, но вот написал такую маленькую авторизацию, надеюсь работает правильно, если, что не так - отпишите.
Файл auth.php :
<?php
//Создаем пользовательские переменные
$user_login = !empty($_POST['login']) ? $_POST['login']:NULL; //Значение из поля "Логин"
$user_pass = !empty($_POST['pass']) ? md5($_POST['pass']):NULL; //Значение из поля "Пароль"
$a = !empty($_GET['a']) ? $_GET['a']:NULL; //Какое либо "событие"

$admin_login = 'root'; //Логин администратора
$admin_pass = md5('root'); //Пароль администратора

//Если пользователь нажал кнопку "Выход", удаляем cookie

if($a == 'exit') {
setcookie('user_login', 0);
setcookie('user_pass', 0);
echo 'Выход успешно осуществлен. <a href="auth.php">Далее</a>';
exit;
}


//Если пользователь ввел чего нибудь в форму, проверяем, является ли это логином и паролем
if(!(empty($user_login) && empty($user_pass))) {
if($user_login == $admin_login && $user_pass == $admin_pass) {
//Если логин и пароль были введенны верно, создаем cookie
setcookie('user_login', $user_login, time()+(60*60));
setcookie('user_pass', $user_pass, time()+(60*60));
echo 'Вы успешно авторизировались. <a href="auth.php">Далее</a>';
exit;
}
}


//Проверяем, существует ли сессия
if(!(empty($_COOKIE['user_login']) && empty($_COOKIE['user_pass']))) {
//Если cookie существует, проверяем cookie на валидность
if(!($admin_login == $user_login && $admin_pass == $user_pass)) {
//Если логин и пароль введенны неверно, удаляем cookie пользователя
setcookie('user_login', 0);
setcookie('user_pass', 0);
echo 'Ваша сессия записанна не верно и была удалена. <a href="auth.php">Далее</a>';
exit;
}
}

//Если cookie несуществуют, предлогаем пользователю авторизироваться
else {
echo '<form action="auth.php" method="POST">';
echo 'Логин: <input type="text" name="login" value=""><br>';
echo 'Пароль: <input type="password" name="pass" value=""><br>';
echo '<input type="submit" value="Войти">';
exit;
}

echo 'Добро пожаловать на защищеную страницу, вы вошли как '.$_COOKIE['user_login'].'<br>';
echo 'Вы можете выйти из защищенной страницы. <a href="auth.php?a=exit">Выйти</a>';

При авторизацию через базу данных, соответственно должен осуществлятся поиск по базе и заместо $admin_login и $admin_pass - логин и пароль из базы.

P.S.:> скрипт только для примера, если будите писать нормальную авторизацию, обязательно фильтруйте переменные.

Спустя 3 часа, 53 минуты, 48 секунд (27.04.2011 - 13:29) nixon03 написал(а):
UnWind, спасибо большое! но вот я ввожу в поле логина root и пароль тоже root, так мне сначала выдает "Вы успешно авторизовались", а потом "Ваша сессия записанна не верно и была удалена". С чем это связано?

Спустя 4 часа, 56 минут, 2 секунды (27.04.2011 - 18:25) UnWind написал(а):
nixon03
Ой, ошибочку допустил - вот снова листинг уже с исправленными ошибками:

<?php
//Создаем пользовательские переменные
$user_login = !empty($_POST['login']) ? $_POST['login']:NULL; //Значение из поля "Логин"
$user_pass = !empty($_POST['pass']) ? md5($_POST['pass']):NULL; //Значение из поля "Пароль"
$a = !empty($_GET['a']) ? $_GET['a']:NULL; //Какое либо "событие"

$admin_login = 'root'; //Логин администратора
$admin_pass = md5('root'); //Пароль администратора

//Если пользователь нажал кнопку "Выход", удаляем cookie

if($a == 'exit') {
setcookie('user_login', 0);
setcookie('user_pass', 0);
echo 'Выход успешно осуществлен. <a href="auth.php">Далее</a>';
exit;
}


//Если пользователь ввел чего нибудь в форму, проверяем, является ли это логином и паролем
if(!(empty($user_login) && empty($user_pass))) {
if($user_login == $admin_login && $user_pass == $admin_pass) {
//Если логин и пароль были введенны верно, создаем cookie
setcookie('user_login', $user_login, time()+(60*60));
setcookie('user_pass', $user_pass, time()+(60*60));
echo 'Вы успешно авторизировались. <a href="auth.php">Далее</a>';
exit;
}
}


//Проверяем, существует ли сессия
if(!(empty($_COOKIE['user_login']) && empty($_COOKIE['user_pass']))) {
//Если cookie существует, проверяем cookie на валидность
if($admin_login != $_COOKIE['user_login'] && $admin_pass != $_COOKIE['user_pass']) {
//Если логин и пароль введенны неверно, удаляем cookie пользователя
setcookie('user_login', 0);
setcookie('user_pass', 0);
echo 'Ваша сессия записанна не верно и была удалена. <a href="auth.php">Далее</a>';
exit;
}
}

//Если cookie несуществуют, предлогаем пользователю авторизироваться
else {
echo '<form action="auth.php" method="POST">';
echo 'Логин: <input type="text" name="login" value=""><br>';
echo 'Пароль: <input type="password" name="pass" value=""><br>';
echo '<input type="submit" value="Войти">';
exit;
}

echo 'Добро пожаловать на защищеную страницу, вы вошли как '.$_COOKIE['user_login'].'<br>';
echo 'Вы можете выйти из защищенной страницы. <a href="auth.php?a=exit">Выйти</a>';


Сравни первый и второй листинг и для опыту сравни и найди ошибки. ;)

Цитата
UnWind, спасибо большое!

Не за что, кушай с булочкой :)

P.S.:> А вообще для большего удобства, можно класс авторизации написать и подключать его где нужно, что бы не повторятся миллионы раз. Но сперва научись процедурно это делать, а потом уже классы. ;)

Спустя 11 минут, 5 секунд (27.04.2011 - 18:36) nixon03 написал(а):
UnWind
Нашёл ошибочку, спасибо ) Если Вам не тяжело, то не могли бы Вы мне объяснить ещё 2 вопросика .. icq 424483061 (Яша).

Спустя 1 минута, 50 секунд (27.04.2011 - 18:37) UnWind написал(а):
nixon03
Хорошо, проблем нет - сейчас постучу. wink.gif

P.S.:> Запросил авторизацию, принимай.

Спустя 7 минут, 20 секунд (27.04.2011 - 18:45) nixon03 написал(а):
Нету у меня пока запроса на авторизацию..
Быстрый ответ:

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