PHP сессия перекрывается для двух клиентов

0

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

Я вижу шаблон в mail.yahoo.com, если я вхожу в свой mail.yahoo с одним идентификатором пользователя и пытаюсь войти в другой идентификатор пользователя на новой вкладке. один из них выходит из системы. Любая идея, как это можно сделать...

благодаря

  • 0
    вы проверяете в той же системе? или в diff системе и в том же браузере для 2 пользователей?
  • 3
    пожалуйста покажи свой код
Показать ещё 6 комментариев
Теги:
session

3 ответа

0
Лучший ответ

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

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

Это не потому, что они разные люди, использующие машину, а скорее тот же человек, который работает с разными людьми.

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

ОК. Итак, как это сделать.

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

Однако то, что вы можете сделать, это разделить этот сеанс с потоком приложения или контекстом приложения.

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

Ключом для каждого сеанса является ключ "поток приложения". Вы должны передать это в своих URL-адресах.

Например

Ваш текущий сеанс может иметь простую настройку:

$_SESSION['user'] = 'some username';
$_SESSION['role'] = 'power user';

Вместо этого вы сохраняете это как:

$_SESSION[0]['user'] = 'some username';
$_SESSION[0]['role'] = 'power user';

По всем URL-адресам вы добавляете:

&appId=0

И всякий раз, когда вы ссылаетесь на свою сессию, вы используете что-то вроде:

$username = $_SESSION[ $_GET['appId'] ]['user'];

Очевидно, вы завершаете все это в класс классной сессии, но это основная идея.

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

Например

$sLoginLink = "<a href='/login.php?appId=" . generateNewAppStreamId() . "' target='_BLANK'>New Login Screen</a>";

Поскольку все все еще сохраняется в сеансе, все ваше приложение должно работать точно так же, как только вы всегда используете appId для каждого URL-адреса в системе.

Я попытался сделать объяснение максимально простым - простите меня, если я использовал слишком много слов.

0

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

Это на самом деле лучшая практика выхода из системы.

Если вы хотите, чтобы одновременно регистрировались два пользователя из одного браузера, вы должны помещать что-то в URL-адрес, чтобы разделить их. Например, после входа в систему пользователь # 1 увидит все страницы как http://www.example.org/1/... и у пользователя # 2 будет свой собственный URL-адрес (http://www.example.org/2/...). Затем вам нужно использовать session_set_cookie_params() для каждого пользователя с правильным значением для параметра $path ('/1' для пользователя # 1, '/2' для пользователя # 2 и т.д.).

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

  • 0
    Я использую приведенный ниже код session_start (); $ userName = $ _SESSION ['LoginName']; $ CustomerID = $ _ SESSION [ 'имя пользователя']; $ _SESSION ['UID1'] = $ customerid;
  • 0
    где я могу добавить session_regenerate_id () в приведенном выше коде
Показать ещё 5 комментариев
0

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

  • 0
    session_start (); $ userName = $ _SESSION ['LoginName']; $ CustomerID = $ _ SESSION [ 'имя пользователя']; $ _SESSION ['UID1'] = $ customerid; Как я могу изменить приведенный выше код, чтобы избавиться от проблемы?
  • 0
    session_start (); if (isset ($ _ SESSION ['LoginName'])) {header ('location: yourinnerpahe.php'); Выход; } else {// code}
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню