$auth = file('auth.txt'); // авторизированные пользователи
$userlist = file('userlist.txt'); // зарегестрированные пользователи
for ($i = 0; $i < sizeof($auth); $i++) {
$a = explode('|',trim($auth[$i]));
if ($a[0] == $_COOKIE['id']) {
for ($c = 0; $c < sizeof($userlist); $c++) {
$u = explode('|',trim($userlist[$c]));
if ($u[0] == $a[1] && $u[1] == $a[2]) { пользователь авторизирован на сайте }
}
}
}
написание скрипта регистрации
все что меня тормозит от начала написания скрипта регистрации пользователей на сайте - это незнание как его лучше и безопаснее реализовать, поэтому хотелось бы узнать вашего совета.
на данный момент есть всего одна идея по этому поводу, еще что-то лучше этого - я придумать не могу.
вобщем, смысл в том, что информация "авторизирован ли пользователь на сайте" - хранится у "нас"
как уже было сказано в одном из тем, - в куках храним только рандомный id, и будет еще одна база (.txt) со списком.
теперь пошагово:
при каждом заходе на страницу генерируется рандомный id.
юзер авторизируется на сайте через обычную форму - ему в куки задается этот id и записывается в auth.txt строка
Цитата:
id из куки|логин|пароль
дальше всегда только сверяем эту базу авторизированных пользователей с настоящей (для примера, запись в настоящей базе будет простой "логин|пароль")
Код:
как видите, со стороны клиента лишь его постоянный ID, а информация авторизирован он на сайте или нет - хранится у нас, то есть те логин и пароль которые он ввел для авторизации.. хранятся в отдельном файле и сверяются с настоящей БД зарегестрированных пользователей.
p.s. я нуб в пхп, за возможно не оптимизированный код прошу не ругать.. хотел лишь показать технологию
ну раз уж если и это не есть хорошо.. то скажите, что хорошо?
я правда, в самом деле в замешательстве.. и только впервые на вашем сайте узнал что хранить логин и пароль в куках не гуд - ну понятно дело не безопасно.. я смотрел как делают многие..
а теперь, очень любопытно, как так вообще можно профессионально это дело реализовать)..
с нетерпением жду критики и ответов!
Зачем тебе в auth.txt хранить пароль? Сравнить только имя пользователя по твоему не достаточно?
пароль держится в базе, зашифрованный MD5
при авторизации сравниваются хеши введенного пароля и того что в базе - если совпадают, открываем сессию (можно извратиться и дать пользователю выбрать срок сессии)
пробывал делать в момент авторизации пользователя то есть обработки формы входа на сайт
Код:
if ($_POST['autologin'] == 'on') { session_set_cookie_params(time()+12960000); }
но не работает - закрыл браузер, вновь открыл и он меня не запоминает..
и еще подскажите пожайлуста)
Код:
// вход на сайт
if ($do == 'enter') {
// если ввели логин, пароль и нажали кнопку входа
if ($_POST['submit'] && $_POST['login'] && $_POST['password']) {
// шифруем введенный пароль
$pswd = md5($_POST['password']);
// проходимся по базе в поисках юзера
for ($i = 0; $i < sizeof($userlist); $i++) {
// если все совпадает
if (usr($i) == $_POST['login'] && usr($i,1) == $pswd) {
// создаем сессию
session_register($unique.'login');
session_register($unique.'password');
$_SESSION[$unique.'login'] = $login;
$_SESSION[$unique.'password'] = $pswd;
// если отмечен checkbox value="1" для автологина...
if ($_POST['auto']) { session_set_cookie_params(time()+12960000); }
// дальше незачем продолжать когда нашли нужного юзера..
break;
}
}
}
}
if ($do == 'enter') {
// если ввели логин, пароль и нажали кнопку входа
if ($_POST['submit'] && $_POST['login'] && $_POST['password']) {
// шифруем введенный пароль
$pswd = md5($_POST['password']);
// проходимся по базе в поисках юзера
for ($i = 0; $i < sizeof($userlist); $i++) {
// если все совпадает
if (usr($i) == $_POST['login'] && usr($i,1) == $pswd) {
// создаем сессию
session_register($unique.'login');
session_register($unique.'password');
$_SESSION[$unique.'login'] = $login;
$_SESSION[$unique.'password'] = $pswd;
// если отмечен checkbox value="1" для автологина...
if ($_POST['auto']) { session_set_cookie_params(time()+12960000); }
// дальше незачем продолжать когда нашли нужного юзера..
break;
}
}
}
}
функция usr() представленная здесь. просто на сайте форум, комментарии к чему-то, блоги.. вобщем часто приходится обращаться к яйчекам в БД пользователей, по тому и нужна эта функция.
Код:
$userlist = file('db/usr.txt');
function usr($usr_id=0,$usr_data=0) {
global $userlist;
$usr = explode('|',trim($userlist[$usr_id]));
return $usr[$usr_data];
}
function usr($usr_id=0,$usr_data=0) {
global $userlist;
$usr = explode('|',trim($userlist[$usr_id]));
return $usr[$usr_data];
}
вот код, а вопрос: Нужно ли в сессию задавать $_SESSION[$unique.'password'] = $pswd; - пароль? для проверки авторизации пользователя.. или же достаточно одного логина и юзер не сможет это подменить?
спасибо:)
session_set_cookie_params() надо перед session_start()