2009-03-24 6 views
39

サーバー上のすべてのセッション(およびそれぞれの変数)のリストを取得する方法はありますか?PHPのすべてのセッションをループする

基本的には、現在どのユーザーがサイトにログインしているかを知る必要がある保守機能があります。私たちは既に各ユーザーのデータをセッション変数に格納していますが、これらの各セッションをループして必要なデータを抜き出すことができると期待しています。

私のPHPは非常に限られています(私はussually .Net開発者ですが)誰かがこれが可能なのかどうか知っていれば、私はとても感謝しています。私はこれをgoogledし、私が見つけた結果は不可能であることを知らせる傾向があったが、私はこれを受け入れることが非常に難しいと思う。

でも、できないのであれば、私はStackOverflowの仲間が私に決定的な答えを与えることができると思った!

答えて

38

PHPは、各ユーザのセッションデータをサーバの一時フォルダに保存します。このフォルダは、session.save_path変数の下にあるphp.ini設定ファイルで定義されています。 php.iniファイルの中から、この値を探し、または代わりに、とのPHPファイルを作成します。それは中身だとして

<?php echo "Session Save Path: " . ini_get('session.save_path');?> 

、およびお使いのブラウザでファイルを開きます。

セッションデータの保存パスを見つけたら、そのフォルダを開くと、かなり単純な構造になります。すべてのセッションは、sess_ $ SESSIONIDの形式で格納されます。

セッションデータは、ディスクに格納される前にシリアル化されます。そのため、セッションファイルに格納されているオブジェクトは、使用可能になる前にデシリアライズする必要があります。ただし、セッションデータ(例:$_SESSION['userid'] = 1234)を保存してユーザーの情報を保存するプレーンテキストを使用している場合は、探しているデータを解析するだけで十分ですファイル内。

もう1つ...私はそれを調べていませんが、ファイル名に表示されるセッションIDが、たとえばユーザーのコンピュータに保存されているPHPSESSID Cookieの名前に直接対応しているかのように見えます。これを念頭において、一時セッションディレクトリ内のファイルをループし、$ SESSIONID値をすべて取得し、session_id($SESSIONID)を使用して現在のセッションIDを設定し、session_start()でセッションを開始し、PHPを介して必要なデータにアクセスすることができますコンテンツファイル自体を解析する必要はありません。これが可能かどうか誰でも確認できますか?

編集:調整済み投稿はItayさんのコメントに一致します。ここで

+13

この種のハックはひどい考えです。 PHPには「共有しない」アーキテクチャがあり、それをハックしようとすると釘を植え付けるためのドライバーを使うようなものになります。 serwer内部ファイルを解析するのではなく、独自のファイルを作成するか、必要に応じてデータベースを使いこなすことができます。 – smentek

+0

phpにはセッションデータをメモリに保存するオプションがあります。必ずしもファイルからそれらを取り出すことはできません。 – jondinham

+1

以上の場合、これらの "ses_ *"ファイルは、複数レベルのディレクトリ構造の下に置くことができます。これはphp.netで言われたものです – jondinham

6

は、格納されたファイルを経由してセッションのリストを取得するために、より簡潔な方法です:

<?php 
print_r(scandir(session_save_path())); 
?> 
0

これはあなたのすべてのセッションのためのデータを取得し、配列に格納し、セッションIDでインデックス化:

<?php 
$allSessions = []; 
$sessionNames = scandir(session_save_path()); 

foreach($sessionNames as $sessionName) { 
    $sessionName = str_replace("sess_","",$sessionName); 
    if(strpos($sessionName,".") === false) { //This skips temp files that aren't sessions 
     session_id($sessionName); 
     session_start(); 
     $allSessions[$sessionName] = $_SESSION; 
     session_abort(); 
    } 
} 
print_r($allSessions); 
関連する問題