2012-01-27 14 views
0

現在のユーザーセッションで1つの変数を設定解除する場合は、コマンドunset($_SESSION['something'])を使用できます。php - 他のセッションから1つの変数をアンセットすることは可能ですか?

私はPHPSESSIDの値を知っている場合(現在のユーザーセッションを変更せずに行うことができます)、他のセッションからの変数を1つだけ解除することは可能ですか? PHPSESSIDのセッションがまだ存在するかどうかをチェックしたい場合は、選択したPHPSESSIDのunset($_SESSION['something'])が存在する場合はチェックします。

+5

これは可能ですが、それほど簡単ではありません。私はこれが悪い設計であることを示唆したい、あるユーザは別のユーザのセッションで何もする必要はないはずである。解決したいものを解決するための別の方法を探してみてください。 – deceze

+0

あなたはどのように複数のセッションを持っていますか? –

+0

私は他の解決策を持っています。 CRONがセッションを引き継ぎ、1つの変数を変更できるようにすることができます。 'session_id($ variable_PHPSESSID); session_start(); 'しかし、私はそれを他の方法でしたいと思います。私はもっ​​と簡単な方法でそれができると思った。しかし、私もスクリプトを再構成することを考えます。 – Lucas

答えて

2

解除に私はPHPSESSID値

を知っているとき場合、他のセッションから1つの変数のみが、はい、これが可能であり、あなたが希望そのセッションのセッションIDを知っておく必要があります可能性。これは、変数/値の設定を解除するのが好きです。

現在のユーザーセッションを変更せずに行うことはできますか?

標準のPHP関数を使用したい場合、セッションを切り替えることはできません。サードパーティのライブラリを使用すると、セッションを切り替えずにそのことができます。

PHPSESSIDのセッションが存在するかどうかを確認します(存在する場合)。unset($_SESSION['something'])のPHPSESSIDを選択します。

$unsetFromSessionID = ... ; # set your session id from where you want to unset from 
$unsetVariableName = 'something'; # set the variable name 

$backupSessionID = session_id($unsetFromSessionID); 
session_start(); # load session data 
unset($_SESSION[$unsetVariableName]); 
session_commit(); # save changes to disc 

session_id($backupSessionID); # switch to current session 
session_start(); 

あなたは、他のセッションがアクティブであったかどうかを検索したい場合は、これはでは不可能である。

これはphp destroy a session which is not the current sessionへの答えにかなり似ていますが、唯一の特定のメンバーを削除することですこのメソッドとPHP内から、session_start()に新しい空のセッションが作成されるため、それは存在しません。

代わりに、セッションストアを直接使用することもできます。ディスク上のセッションファイルを探し、内容をロードし、変数を削除して保存し直します。これを行うことができるPHPライブラリはSerializedですが、それは良い出発点かもしれないSession File Viewerの例で出荷されています。

も参照してください:あなたは、各ログインのセッションIDを変更したい場合はHow to tell if a session is active?

0

私はこれを行うことが良いことではないことを知っています。質問の下のコメントに感謝します。だから、CRONタスクでは、ユーザーアクセスがない方がいいでしょうか?

session_id($variable_PHPSESSID); 
session_start(); 
unset($_SESSION['something']); 
0

、プロセスのログイン時session_regenerate_id(true)を使用してください。

session_start(); 
    session_regenerate_id(true);