У каждого пользователя есть только 1 идентификатор сеанса?

Я все еще новичок в использовании сеансов и файлов cookie и не понимаю этого, поэтому хочу спросить:

<сильный>1. У каждого пользователя есть только 1 идентификатор сеанса?

<сильный>2. Что такое идентификатор сеанса?

Я попытался сохранить данные в сеансе, но когда я попытался сохранить другие данные, у него было то же самое Session ID. Итак, как я узнаю, кому принадлежат эти данные?

Я действительно хочу сделать корзину для покупок в SPA react.js, используя бэкэнд-экспресс. но я не знаю, как хранить эту корзину данных. до сих пор, что я сделал, я хочу сохранить корзину данных в сеансе, например product_id and product_variant, а затем вызвать это product_id and product_variant в базе данных на основе этого Session ID.

Поправьте меня если я ошибаюсь. Спасибо


person Faris Dewantoro    schedule 13.01.2019    source источник


Ответы (1)


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

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

Кроме того, единственное, что я должен упомянуть, это то, что вы не должны хранить личную информацию в данных сеанса. Например, не храните идентификатор их учетной записи в переменных сеанса или их пароль/адрес электронной почты/имя пользователя и т. д. Можно изменить данные сеанса и получить доступ к другим учетным записям, если вы полагаетесь на сами данные сеанса, чтобы узнать, кто является пользователем. Зашифрованные/рандомизированные идентификаторы сеансов могут быть настолько уникальными, что пользователь практически не сможет разумно обмануть ваш сервер, заставив его думать, что это другая учетная запись. Вот почему мы храним их в базе данных с дополнительной информацией вместо того, чтобы устанавливать другие переменные сеанса.

Пример:

В PHP мы могли бы иметь session_id(), но также хранить такие вещи, как $_SESSION['setting'] или $_SESSION['theme_choice'] и другие тривиальные настройки, чтобы не искать их в базе данных при каждой загрузке страницы.

person Nerdi.org    schedule 13.01.2019
comment
у вас есть хорошие рекомендации по разработке схем баз данных для сеансовых таблиц или личной информации, чтобы сделать ее более безопасной? - person Faris Dewantoro; 13.01.2019
comment
Обычно я устанавливаю таблицу с именем user_sessions или что-то подобное... id (int, автоинкремент, первичный ключ), user_id (int 11 UNIQUE), session_id (varchar 255 UNIQUE), start_time (varchar 255 или временная метка), ip_address (varchar 255 или временная метка). ), browser_info (varchar)... Затем, когда пользователь заходит на сайт, я говорю: Что такое session_id? -› Проверьте базу данных, чтобы увидеть, существует ли она -› убедитесь, что IP-адрес тот же -› убедитесь, что информация о браузере / пользовательский агент такая же -› убедитесь, что start_time не слишком давно, чтобы мы могли автоматически выйти из системы через заданное количество времени . - person Nerdi.org; 13.01.2019
comment
поэтому мой вопрос: у каждого пользователя есть только 1 идентификатор сеанса? это правильно? - person Faris Dewantoro; 14.01.2019
comment
Вы можете сделать так, чтобы пользователь мог иметь более одного сеанса. Вы должны инициировать сеанс следующим образом... session_id('unique-session-id-1'); сеанс_старт(); а затем вы можете установить переменные сеанса и использовать их. Если вы хотите получить доступ ко второму сеансу пользователя, вы можете сделать... session_write_close(); а затем откройте второй сеанс следующим образом... session_id('unique-session-id-2'); сеанс_старт(); а затем получить доступ ко всем переменным, установленным во 2-м сеансе. В основном просто используйте session_write_close() всякий раз, когда вы хотите переключиться на другой сеанс, который есть у пользователя, а затем откройте его, объявив session_id, который вы хотите - person Nerdi.org; 14.01.2019
comment
я не знаю, почему вы установили start_time? потому что сеанс автоматически остановится, когда время истечет, и создаст новый сеанс.Correct Me If I'm Wrong - person Faris Dewantoro; 14.01.2019
comment
Я сохраняю время начала сеанса, потому что я могу использовать его для отслеживания входов в систему или обновлять время через определенные промежутки времени и получать более точную информацию об активности пользователя. Само по себе это не слишком полезно, но если вы интегрируете с другими функциями ведения журнала, это может быть очень полезно. Конечно, сеансы могут автоматически истекать, но мне это нравится по целому ряду причин. - person Nerdi.org; 14.01.2019
comment
эй, чувак, у меня возникла проблема, когда я пытаюсь проверить информацию о браузере в сеансе пользователя. когда я пытаюсь использовать инструменты разработчика и устанавливаю режим устройства в своем браузере, я получаю некоторую ошибку, потому что у меня тот же IP_address, user_id, session_id, но не с browser_info, поэтому я получил ошибку - person Faris Dewantoro; 18.01.2019
comment
вы используете $_SERVER['HTTP_USER_AGENT']? - person Nerdi.org; 19.01.2019