2015-11-19 4 views
0

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

Есть ли способ в PHP для хранения этого сеанса?

+0

Хранить в другом месте. Сессия предназначена для данных сеанса, используйте другие файлы cookie для хранения того, что не должно беспокоить сеанс. – Andrius

+0

Что такое сеанс? Сессия - это нечто вроде того, что у вас есть удостоверение личности для входа в офис. Если вы показываете действительную и подлинную i-карту, вы можете войти в офис, но если вы не будете выброшены. То же самое здесь ваш сеанс хранится на сервере, и когда вы открываете определенный URL-адрес, ваш браузер предоставляет идентификатор сеанса, такой как cookie-сервер для распознавания, если есть какой-либо сеанс против этого файла cookie, вы будете входить в систему иным образом.Это причина, по которой заканчивается ваша сессия, если вы очищаете данные своего браузера, – Bugfixer

+0

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

ответ

0

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

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

Пример конфигурации;

'components' => [ 
    'user' => [ 
     'identityClass' => 'common\models\User', 
     'enableAutoLogin' => true, 
     'identityCookie' => [ 
      'name' => '_frontendUser', // unique for frontend 
     ] 
    ], 
    'session' => [ 
     'name' => 'PHPFRONTSESSID', 
     'savePath' => sys_get_temp_dir(), 
    ], 
    .... 

Вы бы сделали то же самое для бэкэнд, используя только разные имена.

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

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

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

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

Я должен также добавить, что я написал вики о том, как иметь 2 отдельных сессии здесь: http://www.yiiframework.com/wiki/814/guide-how-to-actually-separate-frontend-user-and-backend-admin-on-yii2-advanced/

Проблема с yiii2 расширенным, по умолчанию, если вы войти в веб-интерфейс, вы также вошли в бэкэнд. Хорошо, если вы используете frontend в качестве членов и бэкэнд в качестве администратора, вы этого не хотите! Элемент не должен регистрироваться в области администратора. Поэтому вы должны сделать им 2 отдельных сеанса.

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

0

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

Смежные вопросы