前回に引き続き $_SESSION の情報を取得してみたいと思います。
前回の調査では EC-CUBE Ver.3.0.15 にて、以下の形にて SESSION 情報を セッションオブジェクトとして格納できました。
// $request から $_SESSION 情報を取得 $wSESSION = $request->getSession(); print_r( $wSESSION->all() ); // $app['request'] から $_SESSION 情報を取得 $wSESSION = $app['request']->getSession(); print_r( $wSESSION->all() );
できることなら $_GET や $_POST と同じように配列で値を保持してくれると助かるのですが思ったようにはいかないものです・・・
特にセッションオブジェクトの内容を見る限りではシリアライズ化されているようです。
色々とメンドクサイものですね(笑)
とは云え、まったく取得できない状況を考えると非常にありがたいものです。
今回はセッションオブジェクトから情報を取得する方法を調査してみたいと思います。
// $_SESSION $wSESSION = $request->getSession(); print_r( $wSESSION->all() );
基本的には上記の内容にて $_SESSION 情報を「$wSESSION」に取り込んでいます。
$_GET や $_POST と同様に「$wSESSION->all()」の形式にして情報を取得することで情報の取得自体は出来ています。
しかしながら SESSION にてオブジェクトを格納する場合「serialize()/unserialize()」をすると云う約束事があるようです。
そのため、例えばログインした後に会員情報をセッション情報から取得する場合は作業が必要になります。
以下の内容でシリアライズ化されていない会員情報オブジェクトとして取得可能になります。
// 会員情報 $wSessionCustomer = unserialize( $wSESSION->get('_security_customer') ); print_r( $wSessionCustomer );
ただし、EC-CUBE3 のよくわからない部分ではありますが、カート情報はシリアライズ化されておらず生のオブジェクト情報が取得できます。
// カート情報 print_r( $wSESSION->get('cart') );
まぁ、実際に運用する場合には「$wSESSION->all()」の内容を確認してシリアライズ化の有無を確認する必要があるようですね。
統一してあればデータの扱いが簡単になるのではないかとは思えるのですが・・・
とは云え本来の使い方と違う方法にて情報が取得できているのであれば有難いことですよね(笑)
と云うことでセッション情報も取得できる方法はわかりました。
今回はこのあたりで終了とさせて頂きます。