web-dev-qa-db-ja.com

respの読み方。データベースから読み取ったJoomlaセッションデータを解析しますか?

PHP session_decode()unserialize()がその値を処理していないため、それぞれ解析されたJoomlaセッションデータを読み取る方法はありますか?

私のコンポーネントでは、すべてのアクティブな非ゲストセッション(#__sessionデータベーステーブルのデータ列)からデータを読み取り、特定の変数の存在を確認する必要があります。

2
Mario Neubauer

そのフィールドでは、データは名前空間に分割されます。名前空間とそのデータは_|_で区切られているため、explode('|',$data)を使用すると、奇数のインデックス要素がデータ配列であり、各偶数のインデックス要素が名前空間である配列が実現されます。この変数を名前空間にデコードする方法の例を次に示します。

_$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('data')->from('#__session');
$db->setQuery($query);
$raw_data = str_replace('\0\0\0', chr(0) . '*' . chr(0), (string)$db->loadObject()->data);
$raw_data = explode('|',$raw_data);

$data = array();
for( $idx = 1, $ic=count($raw_data); $idx<$ic; $idx+=2 ) {
    $data[$raw_data[$idx-1]] = unserialize($raw_data[$idx]);
}
_

_$data_変数には、配列キーが名前空間である個別の配列要素に分割されたセッションデータが含まれます。デフォルトの名前空間が最初で、そのインデックスは___default_である必要があります

2
Artur Stępień