Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
5 / 5 / 0
Регистрация: 07.06.2012
Сообщений: 111

Идентификация пользователя кукой

23.05.2017, 23:17. Показов 2524. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю простое CRUD приложение. Что-то вроде доски объявлений. Объявления смогут добавлять только авторизированные пользователи. Чтобы идентифицировать пользователя буду использовать куки и записывать туда идентификатор. Общая идея этого механизма мне понятна. Непонятны некоторые детали реализации.

Итак:
В таблице базы данных я храню id пользователя, логин, хеш пароля, UserAgent и IP с которого впоследний раз заходил пользователь.

Идентификатор пользователя, который буду записывать в куку, генерирую таким вот образом:
$session_id= $userid . '|' . md5($userid . $password_hash . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] )

Получаю идентификатор такого вот вида:
$session_id = "12|66d7cffb5444dc8c1e7a22ecfcb720cc "

Далее этот идентификатор я запишу в куку и теперь всякий раз когда браузер пользователя будет запрашивать ту или иную страницу он мне будет присылать этот идентификатор.

Всё прекрасно. Теперь вопрос: С чем мне этот идентификатор сравнивать?

Получается мне нужно будет полученную строку "12|66d7cffb5444dc8c1e7a22ecfcb720cc " разбирать как-то. Ну например сначала вырезать из неё подстроку до первой вертикальной черты, таким образом я получу id пользователя, потом по этому id делать SELECT в базу и вытаскивать оттуда password_hash, UserAgent, IP, кодировать их снова md5($userid . $password_hash . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] ) и сравнивать хеши. Если хеши совпали значит всё ок и пользователь идентифицирован, если не совпали то редирект на страницу входа.

Правильный ли ход мыслей у меня? Или есть более простое решение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2017, 23:17
Ответы с готовыми решениями:

Безошибочная идентификация пользователя
На сайте имеется модуль голосования. Как сделать, чтобы с одного компьютера можно было голосовать только один раз? То есть как...

Идентификация компьютера пользователя
Здравствуйте. Появилась задача усовершенствовать скрипт голосования на сайте. Сейчас ограничение для голосования идет по ip, проблема в...

Ошибка при работе с кукой
Учусь работать с кукой... Но вылазит ошибка... <?php //Подключаем библиотеки require_once 'lib/settings.php'; require_once...

3
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
24.05.2017, 07:22
Цитата Сообщение от user7845 Посмотреть сообщение
Или есть более простое решение?
Генерируете длинную рандомную строку. Не обязательно md5 и не обязательно подставлять туда какие-то переменные (хеш пароля и т.п.), генераторов строк полно в интернете.

Я сейчас использую эту, на всякий случай указываю длину 100 символов:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public function Get_Random_String($count)
{
    $alph = [
        0,1,2,3,4,5,6,7,8,9,
        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
        'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
        '~', '`', '@', '#', '№', '$', ':', ';', '%', '^', '&', '?', '*', '(', ')', '_', '+', '=', '-', '.', ','
    ];
    $result = '';
 
    for($i = 1; $i <= $count; $i++)
        $result .= $alph[mt_rand(0, count($alph) - 1)];
    
    return $result;
}
Эту строку сохраняете в отдельный столбец БД и отравляете юзеру куку. Также в куках можно сохранить id пользователя.

Когда юзер заходит на приватную страницу, сверяете куку со строкой и id в БД, если совпало - авторизация пройдена.

Если нужно дополнительно проверять IP и браузер - сохраняете их в отдельные столбцы в БД.
1
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.05.2017, 09:51
user7845, вы когда генерируете новый ключ, сохраняйте его в базе (пример тут). Также можно использовать как имя файла и т.д. и т.п.

Добавлено через 3 минуты
P.S. Если идентификатор пользователя хранить в конце полного ключа, разделитель можно не использовать. От этого одни плюсы, в частности нежелательно явно засвечивать идентификатор даже в куке. Пример там же.
1
5 / 5 / 0
Регистрация: 07.06.2012
Сообщений: 111
24.05.2017, 10:18  [ТС]
Благодарю за ответы. Разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2017, 10:18
Помогаю со студенческими работами здесь

идентификация типа пользователя
В общем вопрос наверное более, чем детский, но вот у меня все никак не получается) есть 2 типа админ и юзер, получается, при авторизации...

Идентификация пользователя
Помогите советом или примером по созданию запроса при идентификации пользователя. Имеются 2 формы в Delphi и некая база на SQL Server 2008...

Идентификация пользователя по голосу
Необходимо написать распознавание пользователя по голосу т.е. я произнес речь, на экране появилось мое имя или кто-то иной произнес и его...

Идентификация пользователя в сети
Приветствую. Подскажите, как пользователь идентифицируется в сети, и где это отмечается ? Добавлено через 13 минут Приветствую....

Идентификация пользователя по голосу
НаучРук дал тему &quot;Идентификация пользователя по голосу&quot;. Реализую на C#. Идентификация будет проходить так. Человек (диктор)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru