Видел десятки систем авторизации, у каждой свои плюсы и минусы, помогите пожалуйста написать самый оптимальный вариант. В основном проблема в двойном входе, тоесть возможность использовать 1 и тот же акк с 2 браузеров
Заранее спасибо
В чём проблема я не понял) Если ты о сессиях(зашел с одного браузера, потом зашел с другого и ты авторизован) то это нереально, а если об автологине(index.php?username=%name%&password=%pass%) то не совсем безопасно(все же бояццо людей из за спины ага?) Оптимального варианта обобщённо не существует =) Нужно подбирать исходя из твоих требований, можно вон вообще через веб сервер авторизацию написать, правда ни вид ни функционал особо не расширишь зато надёжно блин =) делай как умеешь, а потом лови баги, юзай криптование хеширование,комбинируй, в общем полёт фантазии! Любую задачу программирования можно решить сотней способов, правда за 80 из них можно получить тумаков от более опытных прогеров =) но зато будешь наверняка знать что и как...
16 Авг 2010, 22:32Аааа.... =_= если проблема с наличием двойного входа то юзай AJAX... Тоесть пишешь в базу и кукис определённый код при авторизации, и при переходах(или по тайму) делай запросы к бд. Если ключ не совпадает(тоесть был ещё один логин и ключ в бд изменился) то вышибаешь =) для телефона - то же самое но при переходи со страницы на страницу...
16 Авг 2010, 22:444, О.о ку ку
нужно создать ещё один столбец в котором будет содержаться значение 0 или 1. при авторизации смотрим, если равно 0, то авторизуем и апдейтим до 1, если 1, то выводим ошибку, типа уже есть авторизация.
но это не лучший вариант. более лучший- сделать таблицу онлайн пользователей и если этот пользователь уже есть в таблице-онлайн, то пишем ошибку, иначе-авторизуем и записываем его в таблицу онлайн

сессию юзера в бд записывай и сравнивай
if($user['sess']!=$_SESSION['code']){
echo 'Ошибка авторизации<br/>';
}
Думал, думал и вот что придумал
файл логина login.php
<?php
include_once 'system/mysql_connect.php';
session_start();
if($_SESSION['auth'] == true)
{
header('Location: ./index.php?error=auth');
}
else
{
$login = $_POST['login'];
$pass = $_POST['pass'];
$loginsql = mysql_num_rows(mysql_query("SELECT ID FROM `users` WHERE login='".$login."' AND pass='".md5($pass)."'"));
if($loginsql == 1)
{
function getIP() {
if(isset($_SERVER['HTTP_X_REAL_IP'])) return $_SERVER['HTTP_X_REAL_IP'];
return $_SERVER['REMOTE_ADDR'];}
$_SESSION['auth'] = true;
$_SESSION['login'] = $login;
$uptime = time()+600;
$loginhesh = md5($_SERVER['HTTP_USER_AGENT']).md5(getIP());
$upsql = mysql_query("UPDATE `users` SET loginhesh= '".$loginhesh."',uptime='".$uptime."' WHERE login='".$login."'");
header('Location: ./index.php?error=ok');
}else
{
header('Location: ./index.php?error=autherr');
}
}
?>
и функция, которая на каждой странице
function logincheck()
{
if($_SESSION['auth'])
{
$nowtime = time();
$clearoldlogins = mysql_query("UPDATE `users` SET loginhesh='' WHERE uptime<$nowtime");
$loginhesh = md5($_SERVER['HTTP_USER_AGENT']).md5(getIP());
$mysqlloginhesh = mysql_result(mysql_query("SELECT loginhesh FROM `users` WHERE login='".$_SESSION['login']."'"),0,0);
if($mysqlloginhesh == $loginhesh)
{
$uptime = time()+600;
mysql_query("UPDATE `users` SET uptime=$uptime WHERE $login='".$_SESSION['login']."'");
}
else
{
unset($_SESSION['auth']);
unset($_SESSION['login']);
header('Location: ./index.php');
}
}
}
?>
Скажите плиз правильно ли я сделал, вроде работает, но все же хотел бы узнать, вдруг это не безопасно или еще чтото
Амбарцумян, в принципе правильно.. но если у юзера динамический айпи он будет вылетать иногда..
я бы брал для хеша не полный айпи а первые три блока..
плюс я не понимаю зачем вышибать всех кто неонлайн 600 секунд? этим ты можеш заколебать пользователей постоянно авторизоваться..
лучше как например тут.. авторизовался полгода назад и пофиг..
и на этой проверке ты еще и запросы секономиш.. не надо будет постоянно обновлять поле time
На счет динамического, это ты верно подметил, спасибо за дополнение, учтем, исправим.
На счет тайма...наверно и в правду надо убрать.
Если можно, последний вопрос, а на сколько безопасно то, что я написал?
Чтото я в последнее время стал сомневатся на счет безопасности, надо пару статей почитать ))