2017-02-20 3 views
0

私はPHPセッションハンドラを使用して自分のサイトに永続セッションを実装しています。 問題は、ある時点で別のMySQLテーブルにuser_keyを挿入する必要があり、その情報をコードから取得する方法がわかりません。PHPで永続セッションハンドラから特定の情報を取得するにはどうすればよいですか?

active|i:1487613760;user_username|s:20:"[email protected]";user_key|s:8:"a5186adc";authenticated|b:1;user_name|s:12:"victor";user_email|s:20:"[email protected]";remember|b:1; 

と私はuser_key変数を取得するための簡単な方法があるかどうかを知りたい:

例えば、私のセッションテーブルにデータ行があります。

ご迷惑をおかけして申し訳ありません。

+0

奇妙なシリアル化形式を思わ:ちょうどキーで必要がありますか? – DevDonkey

答えて

0

最初のオプションは、この文字列をシリアル化解除することです。 http://php.net/manual/en/function.unserialize.php

番目のオプション、あなたは次のパターンとするpreg_match関数を使用することができます:私はどこでもシリアライズされた文字列のフォーマットを処理するための何か、私が前に見たことのない何かを見つける傾ける

preg_match('/user_key\|s:\d+:"([a-zA-Z0-9]+)"/', $string, $match); 
+0

あなたのお手伝いをありがとう4EACH。 問題は、この特定の行を取得する方法がわからないことです。一度に多数のセッションが同時に発生するとします。 –

+0

ユーザーに固有の情報は何ですか? – 4EACH

+0

別のmysqlテーブルに挿入できるようにuser_keyが必要です。 ハンドラで情報を読むためのメソッド "read"があります... –

0

ただし、相続人の配列にそれを回すために迅速な機能(それが過度にエレガントではないかもしれませんが、私は1杯のコーヒーをのみ持っていた):

$string = 'active|i:1487613760;user_username|s:20:"[email protected]";user_key|s:8:"a5186adc";authenticated|b:1;user_name|s:12:"victor";user_email|s:20:"[email protected]";remember|b:1; 
'; 

$array = deserializeSessionString($string); 

echo $array['user_key']; 

// deserialize a session string into an array 
function deserializeSessionString($string) 
{ 
    $output = []; 
    // separate the key-value pairs and iterate 
    foreach(explode(';', $string) as $p) { 
     // separate the identifier with the contents 
     $bits = explode('|', $p); 

     // conditionally store in the correct format. 
     if(isset($bits[1])) { 
      $test = explode(':', $bits[1]); 
      switch($test[0]) { 
       // int 
       case 'i': 
        $output[$bits[0]] = $test[1]; 
        break; 
       case 's': 

        // string 
        // ignore test[1], we dont care about it 
        $output[$bits[0]] = $test[2]; 
        break; 

       case 'b': 
        // boolean 
        $output[$bits[0]] = ($test[1] == 1 ? true : false); 
        break; 
      } 
     } 

    } 

    return $output; 
} 

、あなたは何にアクセスすることができるはずですどのようにあなたのセッションハンドラがそれをシリアル化され、

echo $array['user_key']; 

heres an example

+0

返信いただきありがとうございます。DevMonkey ... セッションIDまたは特定の行への「インデックス」を取得することができます。 セッションハンドラがコード自体を助けることができるかどうかはまだ分かりませんが、その間に_SESSION変数のすべてのページでuser_keyを設定しています。 もう一度ありがとうございます。 –

関連する問題