2016-07-27 3 views
0

私はこの$_SESSION['login']ようなセッションを持っており、それが1と等しいとき、それは使用することが私のウェブサイトにログインしている意味:特定のユーザーのセッションを解除するにはどうすればよいですか?

if ($_SESSION['login'] == 1) { 
    // You are logged 
} else { 
    // login/register 
} 

また、私は、ユーザーのIDが含まれている別のセッションを持っています。このような何か:

echo $_SESSION["Id"]; 
/* It is containing the user's id (an integer number). 
    Something like: 234124 
*/ 

今、私は特定のIDを持つユーザーのための$_SESSION['login']の設定を解除したいです。たとえば、$_SESSION["Id"] = 234124の場合はunset($_SESSION['login'])とします。どうやってやるの?


編集:私がやろうとしているすべてのユーザが自分のパスワードを変更すると、私はすべての彼の他のデバイスから彼をサインアウトするcookiesテーブルからすべての彼のクッキーを削除します。また、私は彼のセッションを削除したい。

答えて

3

私があなたの権利を理解していれば、すべてのセッション(ラップトップ、携帯電話など)からユーザーを完全にログアウトする必要があります。

1)あなたがマッピングuser_id => session_idを持っていて2)何らかの形でセッションを照会できるときだけです。たとえば、データベーステーブルにセッションを保存し、このテーブルにuser_idという列がある場合、ユーザーのすべてのセッションを削除する(または変更する)ことができます。

しかし、デフォルトのPHPセッションハンドラでは不可能です。このようなタイプのマッピングは使用できません。

セッションをデータベーステーブルに保存するa custom session handlerと記述することをお勧めします。マッピングを作成するには、write methodを無効にしてそこにuser_idを抽出することができます。シリアル化されたデータには注意してください。注意してください。session.serialize_handler configuration directive例えば、

php.iniの

session.serialize_handler = php_serialize 

セッションハンドラ

public function write($id, $data) 
{ 
    $content = unserialize($data); 

    return $this->db->insert('sessions', [ 
     'id' => $id, 
     'user_id' => $content['user_id'], 
     'data' => $data, 
    ]); 
} 

と制御コード

if (...) { 
    $db->execute('DELETE FROM sessions WHERE user_id = ?', $userId); 
} 
+0

ありがとう

.. upvote – stack

関連する問題