質問 > フロント機能 > セッションを別サイトで取得するには |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nissi |
投稿日時: 2010/4/7 18:58
対応状況: −−−
|
新米 登録日: 2010/4/7 居住地: 投稿: 5 |
セッションを別サイトで取得するには 初めまして、いつも勉強させていただいております。
早速ですが表題についてご質問させていただきます。 現在、ECCUBEで制作したECサイトとWordpressで制作したサイト(以下:WPサイト)があります。 ECサイトでのログイン情報のセッションをWPサイトで利用したいと考えています。 セッションを利用する理由としては、「会員登録をし、かつ現在ログインをしている状態」でなければ閲覧できないコンテンツを設ける為です。 コンテンツによっては一部商品の購入歴の有無も調べたいと考えておりますが、当面は会員IDさえとれれば構いません。 WPサイトではECCUBEのデータベースにアクセスはできる状態です。 調べた感じではデータベースのdtb_sessionにセッションを格納しているようですが、ここからどのようにして会員情報を取得しているのかで、詰まっております。 一度ECサイトに飛んでから再度WPサイトに戻る仕様でも構わないのですが、お恥ずかしながらそれすら出来ておりません。 ECサイトでの会員情報のセッションをWPサイト(別サイト)で取得することは可能でしょうか? もしよければご教授いただければと思います。 ※ バージョンは2.4.3を利用しています。 ECサイトとWPサイトは同じサーバにあります。 MYSQLではWPサイトでECCUBEのデータベースにアクセスできる状況です。 初めての投稿ですので、お見苦しい点や足りない情報などあるかと存じますが、何卒よろしくお願い致します。 |
kishik |
投稿日時: 2010/4/7 19:13
対応状況: −−−
|
仙人 登録日: 2009/4/3 居住地: 東京 投稿: 382 |
Re: セッションを別サイトで取得するには
|
nissi |
投稿日時: 2010/4/8 10:36
対応状況: −−−
|
新米 登録日: 2010/4/7 居住地: 投稿: 5 |
Re: セッションを別サイトで取得するには 早速ありがとうございます!
今cookieで"sessid"は取得できました。 "sess_data"の取得もできるのですが、 cart|a:2:{s:8:"prev_url";s:68:"/eccube/html/?transactionid=b4c3a991ad2f945eb3d8e41803cd4349507ba0d9";i:0;a:2:{s:5:"price";s:0:""; ・・・ のように出力されます。 これをちゃんとした配列で取得するにはどうすればいいでしょうか。 あまりMYSQLには詳しくなくて・・・ お手数をお掛け致しますが、よろしくお願い申し上げます。 |
kishik |
投稿日時: 2010/4/8 10:44
対応状況: −−−
|
仙人 登録日: 2009/4/3 居住地: 東京 投稿: 382 |
Re: セッションを別サイトで取得するには $_SESSIONまたはSC_Sessionクラスを使えば
バックエンドDBが何かを気にすることなく値を取り出せますよ。 試してみてください。 また、EC-CUBEのソースの中でもいろいろなところで使われているので、そちらを参考にするのもいいかもしれません。 ----- カスタマイズ承ります http://ec-cube.ec-orange.jp/ |
ramrun |
投稿日時: 2010/4/8 13:01
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: セッションを別サイトで取得するには ↑間違いです(汗)。 すみません。 これ、dtb_sessionから直接情報を取り出すのはよいのですが、どうやってクライアントと紐付けするんですか? 引用: ECサイトとWPサイトは同じサーバにあります。 機器が一緒なのはわかりましたが、ドメインもいっしょということでしょうか? |
nissi |
投稿日時: 2010/4/8 13:54
対応状況: −−−
|
新米 登録日: 2010/4/7 居住地: 投稿: 5 |
Re: セッションを別サイトで取得するには ありがとうございます!
なるほど、やはりそれが一番早いですか。 WPサイトでSC_Sessionのクラスを使うことも考えたのですが、なかなか上手くいかず・・・クラス周りや変数とか関係するクラスとかが多いので。 しかし、今後の事を考えるとクラスを使える環境をWP内に構築するのがベストでしょうね。 あまり時間がないのでsess_dataをunserialize出来ればとりあえず急場はしのげるのですが、時間ができればきちんと構築することにします。 アドバイス本当に有難うございます! |
nissi |
投稿日時: 2010/4/8 14:07
対応状況: −−−
|
新米 登録日: 2010/4/7 居住地: 投稿: 5 |
Re: セッションを別サイトで取得するには ご回答ありがとうございます!
unserializeを試してみたところfalseが返ってきました。 これはserializeしているクラスを読み込んでいないとunserializeできないということでしょうか? 確か昔読んだ本にデータ型を変換できないとかなんとか書いていたような気もします。 クラスを読まずにunserializeはできないですよね。 もう少し調べてみます。 >>機器が一緒なのはわかりましたが、ドメインもいっしょということでしょうか? あ、ドメインが同じということです。申し訳ありません。 |
ramrun |
投稿日時: 2010/4/8 14:42
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: セッションを別サイトで取得するには ごめんなさい。
形だけみてunserializeとか書いてしまいました(汗)。 ↓のnote欄にあるunserializesessionとかどうでしょう。 PHP : session_decode http://jp2.php.net/session_decode |
nissi |
投稿日時: 2010/4/8 15:37
対応状況: −−−
|
新米 登録日: 2010/4/7 居住地: 投稿: 5 |
Re: セッションを別サイトで取得するには おお!ありがとうございます!
無事sess_dataを展開できました! 同じ事をしたい方がいるかはわかりませんが、一応unserializesessionを利用したソースを書いておきます。 ※ただしベタ書きで汚いソースですので、お目汚し申し訳ありません(汗) =========================================================== //cookieを取得 無い場合はNULL $sessid = isset($_COOKIE["PHPSESSID"]) ? $_COOKIE["PHPSESSID"] : NULL; //$sessidに値がある場合はデータベース接続 if($sessid != NULL){ $conn = mysql_connect(DBSERVER,DBUSER,DBPASS); //$sessidを条件にsess_dataを取得 $select = mysql_select_db(DCNAME,$conn); $sql = "SELECT sess_data FROM dtb_session WHERE sess_id = '".$sessid."'"; $query = mysql_query($sql,$conn); $rst = mysql_fetch_array($query); function unserializesession($data) { $vars=preg_split('/([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff^|]*)\|/', $data,-1,PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); for($i=0; $vars[$i]; $i++) $result[$vars[$i++]]=unserialize($vars[$i]); return $result; } //sess_dataデータをunserialize $arr = unserializesession($rst[0]); } =========================================================== おかげさまでなんとか形にできました。 的確なアドバイスがなければいつまでかかっていたかわかりません。自身の勉強にもなりました。 本当に本当にありがとうございました!重ねてお礼申し上げます。 いつか余裕が出来たときは、外部サイトでECCUBEのクラスを利用出来るようなものを作ってみたいと思います。 その際はきちんとしたものを作れるよう頑張ります。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |