2015-09-23 2 views
4

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

$session = Yii::$app->session; 
unset($session['id']); 
unset($session['timestamp']); 
$session->destroy(); 

Он работает только в браузере, откуда я изменил свой пароль. но не для всех браузеров. Я проверил переменную сеанса - $session['id'] существует или нет. Я вижу, что он существует в другом браузере даже после того, как я меняю свой пароль из другого браузера.

ответ

1

Это, безусловно, возможно, используя session_id. Когда пользователь входит в систему в другом месте, вы можете сделать этот шаг, прежде чем начать новую сессию для нового входа в систему:

// The hard part: find out what $old_session_id is 
    $session = Yii::$app->session; 
    unset($session['old_id']); 
    unset($session['timestamp']); 
    $session->destroy(); 


// Now proceed to create a new session for the new login 

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

Жесткая часть узнает, что такое идентификатор «старой» сессии. Нет никакого способа сделать это с одного размера; вам нужно иметь какой-то механизм, чтобы можно было сказать, что сеанс с идентификатором XXX принадлежит тому же пользователю, который сейчас регистрируется. Если вы используете сеансы базы данных, это должно быть достаточно простым.

Я могу представить, что вы могли бы это сделать, используя собственную обработку сеанса. Если вы храните сеансы в базе данных.

+0

спасибо много :) я получил вашу точку :) –

+0

Если вы удовлетворены ответом, то отметьте как принято. :-) –

+0

oh sure, Done :) –

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