2016-07-26 11 views
0

私は同じ親ディレクトリの下にある2つのPHPベースのアプリケーションを持っています。どちらにもログインメカニズムがインストールされています。私が保存するために使用しているセッション変数は、両方のアプリケーションで同じ名前です。アプリケーションのいずれかからIをログアウト時に自動的に他のアプリケーションのセッション変数をクリアする(すなわち、基本的にセッション変数をクリア)次に、1つのディレクトリのPHPセッションが他のディレクトリに影響するのはなぜですか?

$_SESSION["uid"] 

を言います。

これを防ぐにはどうすればよいですか?

+0

は2つです'$ _SESSION'配列内の同じインデックス名を使用するアプリケーション? – Ocracoke

+0

他のアプリケーションのセッションを維持するために、別のブラウザを試すことができます。 –

+0

どのようにセッション変数をクリアしますか? –

答えて

0

PHPでsession_destroy();を使用している場合は、session_destroy();が呼び出されたときに$_SESSIONのすべての変数を削除することがわかります。 Webアプリケーションが2つの異なる変数名を使用しても、これらの変数はまだ$_SESSIONにあり、session_destroy();が呼び出されると失われます。

私のアドバイスは、あなたの$_SESSION変数にプレフィックスを追加し、それらの接頭辞$_SESSION変数をクリアするのではなくこれは、Webアプリケーションのsession_start();後に次を追加することによって行うことができsession_destroy();

を呼び出すための別の関数を作成することです。 webappの1のために

// Web App 2 
define("prefix", "WebApp2"); 
//SET YOUR SESSION VARIABLES LIKE THIS 
$_SESSION[prefix.'authenticated'] = true; 

が続いsession_destroy();

function destroy_session($prefix){ 

foreach($_SESSION as $key => $value) { 

if(preg_match('/^'.$prefix.'/', $value)) 
    unset($_SESSION['key']); 
    } 
} 

するのではなく、私たちの前に置かセッション変数を破壊するために別の関数を作成し、その後、呼び出し:webappの2については

// Web App 1 
define("prefix", "WebApp1"); 
//SET YOUR SESSION VARIABLES LIKE THIS 
$_SESSION[prefix.'authenticated'] = true; 

あなたのウェブアプリのこの機能の代わりにsession_destroy();

destroy_session(prefix); 
0

セッションを開始する前に、両方のアプリケーションのセッションパラメータとセッション名を設定できます。この方法でセッションを終了すると、そのセッションにのみ影響します。

コードは次のようになります - 上記の機能に App1の

$sessionName = session_name("appName1"); 
session_set_cookie_params(0, '/app1', '.domain.com'); 
session_start(); 

App2の

$sessionName = session_name("appName2"); 
session_set_cookie_params(0, '/app2', '.domain.com'); 
session_start(); 

詳細情報は以下のリンクを見つけることができます - http://php.net/manual/en/function.session-name.php http://php.net/manual/en/function.session-set-cookie-params.php

関連する問題