2016-05-31 13 views
1

私はサブドメインからユーザーにログインするためにAjaxを使用しています。 Yii2アプリは別のサブドメインにあります。両方のサブドメインは、同じCookieドメインとセッションドメインを使用し、パスを保存するように設定されています。私はこのような非アプリのサブドメインで使用したのと同じセッションにユーザー情報を書き込むためにAjaxの呼び出しでセッションIDを含めています:

$session = Yii::$app->session; 
$session->open(); 
$session->setId($post["session"]); 
$session["user.id"] = $user->id; 

echo $session->id; // This does not return the same ID originating from post! 

残念ながら、ユーザ情報が既存の既にセッションに書かれていますが、新しいものではありません1。ログインプロセスの途中でセッションが関わっているのですか、それともなぜ動作していませんか?私もsession_id($post["session"])を試しましたが、何もありません。

これは以前のドメインで実際に動作していたので、何か不足しているはずです。投稿されたAJAXの情報はすべて正解であり、チェックされていれば、ユーザーは適切に(ログをチェックして)間違ったセッションにログインしています。

ありがとうございます!

答えて

2

yii\web\Session::setId()session_id()のラッパーですクリックしてください、あなたはこの機能についてはPHPのマニュアルを読んでください。

string session_id([ string $id ])

idが指定されている場合、現在のセッションIDが置き換えられます。その目的でsession_start()の前にsession_id()を呼び出す必要があります。

だから、単に試してみてください:

$session = Yii::$app->session; 
$session->setId($customId); 
$session->open(); 
+0

ありがとう、これは少し役に立ちます。実際には、セッションファイルにはログイン前とログイン後の情報(ユーザーの詳細)が含まれていますが、以前は発生していませんが、IDは全く異なる新しいファイルにセッションを書き込みます。何か案は? – jeesus

+0

たとえば、 '$ oldId = session_id(); $セッション= Yii :: $アプリ - >セッション。 $セッション - > setId($ oldId); $ session-> open(); $ session-> set( "oldId"、$ oldId); '。それで、私はセッションが適切な古いIDを保存しているのを実際に見ることができますが、何らかの理由でセッションIDの古いIDを使用しないで新しいIDを取得します。 – jeesus

+0

さて、それを手に入れました。 '$ user-> login()'メソッドの後に 'session_id()'を割り当てる必要がありました。 – jeesus

0

私は正しい方法に従っているとは思わないSET & GETセッション。

これを試してみてください。

$session = Yii::$app->session; 
$session->open(); 
$session->set('id', $post["session"]); 
echo $session->get('id'); 

詳細情報については、Session Management - Yii2

+0

おかげで、これは結果を変更しません。 '$ session-> set()'はセッション変数を追加します。私は '$ session-> setId()'を使って手動でセッションのIDを変更する必要があります。後者は私の以前のサーバーで作業していたので、私は正しい方向に進みました。私はちょうど何かを見逃しています... – jeesus