Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация, и снова она... 
V
    Опции темы
Рыжий
Дата 6.2.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Всем привет!
Написал систему регистрации/авторизации и задался вопросом: «А безопасна ли система» после долгих поисков «идеального» скрипта – решил, что «идеального» не существует. А каждый участник www видит авторизацию по-своему.

Вот что получилось у меня, что-то мне подсказывает, что тут что-то не так smile
Код


session_start();

//если сессия есть, то пользователь залогинен
if(!empty($_SESSION['login']))  $auth=true;

//если сессии нет, но есть куки - логиним пользователя
elseif(!empty($_COOKIE['login']) && !empty($_COOKIE['pass'])){
       $login=mysql_real_escape_string($_COOKIE['login']);
       $pass=mysql_real_escape_string($_COOKIE['pass']);

       mysql_connect('localhost')
       mysql_select_db('auth');
       $query='select * from '.$CONFIG["db_prefix"].'_user where login = "'.$login.'"
        and pass="'.$pass.'" limit 1';
        $result=mysql_query($query) or die(mysql_error());
         if(mysql_num_rows($result)>0){
                 $auth=true;
                 $row=mysql_fetch_array($result);

                 //устанавливаем переменные
                 $_SESSION['login']=$row['id'];
                 setcookie('login',$row['login'],time()+3600);
                 setcookie('pass',$row['pass'],time()+3600);
         } else $auth=false;

}
//а может быть человек логиниться в этот момент:
elseif(!empty($_POST['login']) && !empty($_POST['pass'])){
       $login=mysql_real_escape_string($_POST['login']);
       $pass=mysql_real_escape_string(md5($_POST['pass']));

       mysql_connect('localhost')
       mysql_select_db('auth');
       $query='select * from '.$CONFIG["db_prefix"].'_user where login = "'.$login.'"
        and pass="'.$pass.'" limit 1';
        $result=mysql_query($query) or die(mysql_error());
         if(mysql_num_rows($result)>0){
                 $auth=true;
                 $row=mysql_fetch_array($result);

                 //устанавливаем переменные
                 $_SESSION['login']=$row['id'];
                 setcookie('login',$row['login'],time()+3600);
                 setcookie('pass',$row['pass'],time()+3600);
              }
}else $auth=false; 



На остальных страницах сайта скрипт такой же, за исключением части с проверкой $_POST.
Как я понимаю – на каждой странице нужно заново переустанавливать cookies, т.к. их время истечет и они станут неактивными? 

Сув.

PS статью в факе читал, туда не посылайте! smile

Добавлено @ 00:33 
Забыл еще рассказать свои критерии:
авторизация должна быть прочной. Но не слишком запудренной. Наверное максимально приближенной к Винградовской. (например открытие сайта в 2 окнах должно поддерживаться) То есть совсем уж пользователя не зажимать!

Однако мне не хочется использовать таблицу БД, т.к. ее нужно будет чистить (cron) да и обращаться лишний раз к БД я не намерен.

Это сообщение отредактировал(а) Рыжий - 6.2.2007, 00:34
PM MAIL ICQ   Вверх
Рыжий
Дата 6.2.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



После еще нескольких минут медитации над кодом, увидел, что $_COOKIE['pass'] не зашифрован, а должен smile
Так что в куку помещаем md5($pass)

Но если куку украдут, разве хацкеры с помощью brootforce не подберут пароль, пусть даже он в md5 ? 
PM MAIL ICQ   Вверх
Всемогущий
Дата 6.2.2007, 08:29 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Пожалуйста скажите какой вообще толк хранить логин и пароль в куках ?

сессии для того и сделаны что бы хранить в них что не попадя 

и ещё как писал Mal Hack, хранить в сессии уникальный ключ этой сессии 

допустим

Код

$_SESSION['key']=sha1(SID.(date('l+d+').$_SERVER['HTTP_USER_AGENT']);

и так как сессии нельзя подделать хранить там цифру говорящую к какой группе пренадлежит человек 
0-->чайник=гость
10-->админ=бог



Далее чувствую будет адская критика моего поста smile  



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
-=Ustas=-
Дата 6.2.2007, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Рыжий @  6.2.2007,  00:21 Найти цитируемый пост)
каждый участник www видит авторизацию по-своему.

Нет, все ее видят одинаково также как и сам разработчик, почти. Просто есть определеные правила защиты, которые ты можешь узнать только тогда, когда будешь знать методы воздействия на систему в качестве злоумышленника.
Цитата(Рыжий @  6.2.2007,  00:52 Найти цитируемый пост)
увидел, что $_COOKIE['pass'] не зашифрован, а должен

Его там вообще не должно быть.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 6.2.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Цитата(Рыжий @  6.2.2007,  00:52 Найти цитируемый пост)
Но если куку украдут, разве хацкеры с помощью brootforce не подберут пароль, пусть даже он в md5 ?  

http://forum.vingrad.ru/topic-20119.html


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Рыжий
Дата 6.2.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Если я не ошибаюсь Винград хранит хеш пароля и логин в куках.

Что же тогда хранить в куках? Ведь узнавать пользователя - как ни крути, а нужно!

Сув.

Это сообщение отредактировал(а) Рыжий - 6.2.2007, 11:34
PM MAIL ICQ   Вверх
mishaSL
Дата 6.2.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Рыжий @  6.2.2007,  00:21 Найти цитируемый пост)
после долгих поисков «идеального» скрипта – решил, что «идеального» не существует


Идеального скрипта не существует, но есть хорошие и достаточно безопасные. Возьми лубой скрипт авторизации из учебника PHP или скрипты авторизации на форумах посмотри. И посмотри основные принципы. Поверь негде не хранят связку логин и пароль в cookie.

Добавлено @ 11:37 
Цитата(Рыжий @  6.2.2007,  11:34 Найти цитируемый пост)
логин в куках.

Это не пароль, это хэш в котором много чего может храниться смотря к чему привязывается программист (к примеру IP, браузер, кодировки и т.д.)


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Рыжий
Дата 6.2.2007, 17:48 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Помещать в cookie ip адрес - значит пользователи с динамичным ip не смогут использовать куку.
Помещать в cookie имя браузера - мне это просто не нужно, пусть люди заходят и с IE и с FF, хоть одновременно!


Это сообщение отредактировал(а) Рыжий - 6.2.2007, 18:54
PM MAIL ICQ   Вверх
mishaSL
Дата 6.2.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Рыжий @  6.2.2007,  17:48 Найти цитируемый пост)
Помещать в cookie имя браузера - мне это просто не нужно, пусть люди заходят и с IE и с FF, хоть одновременно!


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

Смысл был не в этом, смысл в том что не надо хранить пароль в куках. Лучше хранить ID пользователя и уникальный ключ(но не пароль) пользователя и по этим данным проверять пользователя.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Рыжий
Дата 6.2.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Но ведь любую открытую информацию можно подделать. Например если в куках держать логин+email+icq+еще много чего, а другие юзеры видят эту инфу - подделать куку очень просто.
Что же тогда хранить в куках, чтобы узнавать пользователя?
PM MAIL ICQ   Вверх
N1k0laj_BY
Дата 6.2.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.2.2007

Репутация: нет
Всего: нет



Храни в куках уникальный индификатор пользователя не id, а случайно сгенерированую строку
PM MAIL   Вверх
Рыжий
Дата 6.2.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Цитата(N1k0laj_BY @  6.2.2007,  22:34 Найти цитируемый пост)
случайно сгенерированую строку 

А как я потом сгенерирую эту строку? И как я узнаю что под строчкой "sdfjkl;dsjfiofi" у меня юзер igor ? В БД мне ничего хранить не хочется smile
PM MAIL ICQ   Вверх
N1k0laj_BY
Дата 6.2.2007, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.2.2007

Репутация: нет
Всего: нет



Цитата(Рыжий @ 6.2.2007,  23:00)
Цитата(N1k0laj_BY @  6.2.2007,  22:34 Найти цитируемый пост)
случайно сгенерированую строку 

А как я потом сгенерирую эту строку? И как я узнаю что под строчкой "sdfjkl;dsjfiofi" у меня юзер igor ? В БД мне ничего хранить не хочется smile

Один раз за сессию обратиться к БД с данным запросом я думаю можно и производительность от этого неупадет. Тем более при авторизации вы к БД обращаетесь за получением данных пользователя. Что мешает сделать следующее
$query='select * from '.$CONFIG["db_prefix"].'_user where login = "'.$login.'"
        and u_id="'.$u_id.'" limit 1';
u_id генери в зависимости от логина юзера его mail и т.д чтоб одинаковых небыло

Это сообщение отредактировал(а) N1k0laj_BY - 6.2.2007, 23:12
PM MAIL   Вверх
Рыжий
Дата 7.2.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Решил сделать так:
Будет массив Кук:

$_COKIE['my_info'][0] = ID пользователя
$_COOKIE['my_info'][1] = md5($login.' '.$pass);

Выскажите пожалуйста свое мнение.

Алгоритм будет таким: найти юзера с ID == данному, и сравнить хеши, если все ОК - значит ставим сессию, в которую помещаем ID пользователя.

Сув.
PM MAIL ICQ   Вверх
-=Ustas=-
Дата 7.2.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Рыжий @  6.2.2007,  22:30 Найти цитируемый пост)
Но ведь любую открытую информацию можно подделать. Например если в куках держать логин+email+icq+еще много чего, а другие юзеры видят эту инфу - подделать куку очень просто.


Рыжийsmile это уже проблемы пользователя, и ты ничего с этим не поделаешь. Это равносильно, что оставлять ключи от сейфа на вешалке в коридоре. Если пользователь пускает на свою тачку всех подряд, то повторюсь - это его проблемы, а не твои.

Цитата(Рыжий @  7.2.2007,  00:01 Найти цитируемый пост)
Алгоритм будет таким: найти юзера с ID == данному, и сравнить хеши, если все ОК - значит ставим сессию, в которую помещаем ID пользователя.

Да, так и делай.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Рыжий
Дата 7.2.2007, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Хорошо, помечу вопрос решенным ;)
PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Цитата(Рыжий @  6.2.2007,  23:01 Найти цитируемый пост)
$_COKIE['my_info'][0] = ID пользователя
$_COOKIE['my_info'][1] = md5($login.' '.$pass);

Если такую куку украдут - считай вход открыт smile

Без базы та себе сделаешь кучу проблем, но если уже ты их желаешь, то храни так:
Код

$_COKIE['id'] = ID пользователя
$_COOKIE['session_id'] = md5($login.' '.md5($pass).' '.$login_time);

А параметр $login_time таскай в браузерной строке. Так ты легко сможешь проверить, не вышло ли время сессии и обновлять сможешь (через ж. конечно, но работать будет) Такую куку можно и потерять, злоумышленник сможет воспользоваться ей максимум на время сессии.

A md5($pass) ты будешь обязан сделать, так как в открытом виде его после логина уже нигде не возмёшь (Ты же не собираешься пароль на сервере открытым текстом хранить??)

Но по нормальному - конечно БД. Чистить её не надо, только обновлять сессию. (Ну или убивать запись, если юзер удалён). А запрос в in_memory table будет даже быстрее, чем работа с файлами полюбому. Да и потом, ты же за логином/пассом всё равно в БД бегаешь. А тут надо будет только за ИД сессии.

Добавлено @ 01:38 
Цитата(-=Ustas=- @  7.2.2007,  00:11 Найти цитируемый пост)
Рыжий, smile это уже проблемы пользователя, и ты ничего с этим не поделаешь. Это равносильно, что оставлять ключи от сейфа на вешалке в коридоре. Если пользователь пускает на свою тачку всех подряд, то повторюсь - это его проблемы, а не твои.

Не совсем так. Куку конечно украсть сложно, но всё таки можно. Скрипты, ссылки, флэши. Например на форуме у нас Гирдер регулярно находит такие новые дыры и закрывает их. Если подумать, что было на форуме год назад, то удивишься, как не поворовали наши аккаунты уже давно smile))


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 7.2.2007, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Я считаю так:

Юзер сам должен следить за своими куками, и это исключительно его проблемы. На сайте должна быть опция "Не запоминать меня" ("Вход с чужого компьютера") при нажатии которой, куки не устанавливаются. 

Куки нужны только для распознавания юзера, далее все поставлено на сессиях. А вот сессии уже можно хранить в БД (убедили все же  smile ).  В Бд могут быть те же md5($login.' '.$pass). и время валидности сессии.

Как вам такой алгоритм?
PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Цитата(Рыжий @  7.2.2007,  00:50 Найти цитируемый пост)
Юзер сам должен следить за своими куками, и это исключительно его проблемы.

Это ты потом докажи 100 человек, у которых скриптом с твоего сайта куки слизали и приватную переписку всех со всеми опубликовали smile

Цитата(Рыжий @  7.2.2007,  00:50 Найти цитируемый пост)
Как вам такой алгоритм? 

Это хрени: md5($login.' '.$pass) нечего делать у юзера на компе в куках. Это во первых. Во вторых pass в открытом виде не должен существовать вообще нигде, кроме головы пользователя.
Цитата(Рыжий @  7.2.2007,  00:50 Найти цитируемый пост)
Куки нужны только для распознавания юзера, далее все поставлено на сессиях. 

Куки нужны для распознавания сессии, а всё остальное хранится уже в ней. Зачем хранить у юзер что либо, кроме идентификатора сессии?

ПС:
ИД сессии идеале обновляется постоянно. При этом несколько вариантов учитываются как валидные, и старые потихоньку отмирают.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 7.2.2007, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Цитата(sergejzr @  7.2.2007,  02:05 Найти цитируемый пост)
Это хрени: md5($login.' '.$pass) нечего делать у юзера на компе в куках.

Ясное дело! Поэтому я храню это в БД у себя.

То есть в куках хранить SID будет наиболее приемлемым вариантом?
PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Цитата(Рыжий @  7.2.2007,  01:08 Найти цитируемый пост)
Ясное дело! Поэтому я храню это в БД у себя.

Можно спросить, зачем?
Если юзер поменяет ник, ему надо будет новый пасс задавать?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 7.2.2007, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



По-моему мы пришли к тупику. Если куки такие ненадежные - их тогда совсем не использовать? Собственно можно ответить "Да" но замены cookie еще нет, Поэтому, если хотим помнить о посетителях  - используем cookie, в таком виде, как я указывал ранее.

Насчет хранения сессий (БД/файлы) это уже имхо другая тема. Вообще к БД доступ лучше,быстрее да и удалять из нее инфу легче. Так что наверное буду использовать БД.
PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Почему куки ненадёжные? Храни СИД в них, время жизни которого на сервере контролируется. Ну и логин, чтобы перебором никто не попытался пройти.
Больше ничего не надо. (Так и тут на форуме сделано).


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 7.2.2007, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



sergejzr, Тогда время жизни сессии нужно большим устанавливать, если я тебя правильно понял.

Если мы хотим Помнить  о юзере как минимум неделю. А в куке хранится SID. По этому SID мы обращаемся в БД и смотрим не просрочена ли сессия, если просрочена - удаляем сессию, и просим зарегиться пользователя?
PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Да. 

С несколькоми сессиями - это не обязательно делать тут овчинка выделки нестоит. Но неплохо было бы "освежать" их. В идеале - при каждом вызове страницы давать новый СИД. Тогда даже если ктото украдёт его, то юзер "вылетит" со страницы, и большой шанс, что он это заметит и тут же залогинится. Тогда старый СИД у нападавшего станет бесполезным, он же не может новый получить.

Но тут надо конечно с нагрузкой на БД сравнивать. Это же обновление записи при каждом входе. Можно например по времени генерить, каждые 5 минут.

Проблема с таким подходом только в разных браузерах, так как куки обновятся только в одном. Тут помогло бы несколько сессий. Для каждого браузера своя независимая. В принципе оверхеда практически нет. Просто логину в стблице СИДов добавляешь хэш юзер-агента. 

Но тут можно много способов придумать, чтобы одним полем ограничится. Например номер сессии состоит из нескольких частей по части на каждый браузер. итд, итп.





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 7.2.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



В общем, думаю использовать такой вариант:

Будет БД:
session_id – SID сессии;
session_expire – microtime последнего действия (точность до сотых);
session_start    -  время логина (microtime до сотых секунды).
user_id – ID юзера;
login – хеш логина;

Куки:
SID 
Время логина
Хеш логина юзера

Соответственно ищем запись в Бд по SID, а потом проверяем: равны ли логин и время логина.
Время действия можно задавать в конфигах, думаю мне подойдет 5 дней.


Интересно что будет с БД. Если 10 000 человек будет бродить по сайту, и у каждого будет меняться microtime последнего действия? 
PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Цитата(Рыжий @  7.2.2007,  14:40 Найти цитируемый пост)
Интересно что будет с БД. Если 10 000 человек будет бродить по сайту, и у каждого будет меняться microtime последнего действия?  

Если будешь менять его раз в несколько минут, то ничего страшного не будет.

Цитата(Рыжий @  7.2.2007,  14:40 Найти цитируемый пост)
Если 10 000 человек будет бродить по сайту,

А Вы, батенька, оптимист однако smile



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 7.2.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Цитата(sergejzr @  7.2.2007,  15:50 Найти цитируемый пост)
Если будешь менять его раз в несколько минут, то ничего страшного не будет.


Эврика! Тогда берем microtime из бд и проверяем, если он больше 5 минут - обновляем (к примеру...)


Цитата(sergejzr @  7.2.2007,  15:50 Найти цитируемый пост)
А Вы, батенька, оптимист однако

Еще какой! smile 
PM MAIL ICQ   Вверх
Рыжий
Дата 7.2.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Еще один вопрос по теме:
Если мы начинаем сессию (чтобы узнать SID) - создается файл. Через определенное время их будет слишком много. Что делать?
PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Цитата(Рыжий @  7.2.2007,  18:49 Найти цитируемый пост)
Если мы начинаем сессию (чтобы узнать SID) - создается файл. Через определенное время их будет слишком много. Что делать? 

Файл будет если ты через ПХП создаёшь. У тебя же БД, зачем тебе теперь он?



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 7.2.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Для того, чтобы изменить место хранения нужно править параметр session.save_handler. А если у меня нет доступа к php.ini ? Это можно задать в .htaccess ?


PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Не трогай этот механизм совсем. он тебе не нужен.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 7.2.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



sergejzrsmile а что можно трогать?
PM MAIL ICQ   Вверх
sergejzr
Дата 7.2.2007, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Ты же имеешь СИД и базу, зачем тебе ПХПшная сессия?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 8.2.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



sergejzr, Я SID подразумевал под Session ID. А ты похоже хеш, генерируемый мной?
PM MAIL ICQ   Вверх
sergejzr
Дата 8.2.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



СИД=SID=SessionId и он один в программе. Зачем тебе несколько их?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 8.2.2007, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



sergejzr, Но для того, чтобы записать SID нужно сделать session_start() !! (после чего появится файл с сессией на сервере) Или мы не поняли друг друга?
PM MAIL ICQ   Вверх
SamDark
Дата 8.2.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



Рыжий,
Механизм сессий замечательно перекрывается при помощи session_set_save_handler(). 


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Рыжий
Дата 8.2.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



SamDark, Насколько я знаю эту функцию можно использовать только при параметре: session.save_handler = user в PHP.ini.

PM MAIL ICQ   Вверх
sergejzr
Дата 8.2.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Цитата(Рыжий @  7.2.2007,  23:58 Найти цитируемый пост)
sergejzr, Но для того, чтобы записать SID нужно сделать session_start() !! (после чего появится файл с сессией на сервере) Или мы не поняли друг друга? 


Сам посмотри: SID создаёшь ты сам, записываешь в БД сам, хранишь-сам, управляешь ими тоже сам. Скажи, зачем тебе вообще session_start()?




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Рыжий
Дата 8.2.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



sergejzr, Все, вопрос решен.  smile 
PM MAIL ICQ   Вверх
wolfmessing
Дата 29.10.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 24.4.2007

Репутация: нет
Всего: 1



sergejzr
Цитата

Сам посмотри: SID создаёшь ты сам, записываешь в БД сам, хранишь-сам, управляешь ими тоже сам. Скажи, зачем тебе вообще session_start()?


Простите что поднимаю старую тему, но можно ли хотябы узнать примерный код, как без
session_start() SID сделать?

или Хотябы ссылку выложите с таким примером, буду очень благодарен  smile  
PM MAIL WWW ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1950 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.