サブドメイン/ドメインの 1 つのサービスのユーザーが残りのサービスに一度にログインできるようにしたい。
これは私の構造です:
- /図書館
- /アプリ1
- 構成
- モジュール
- ブートストラップ
- /app2
- 構成
- モジュール
- ブートストラップ
- /app3
- 構成
- モジュール
- ブートストラップ
- /アプリ1
ドメイン
- アプリ 1: example.com
- アプリ 2: app2.example.com
- アプリ 3: app3.example.com
それらはすべて、アカウント、セッションなど
に1つのデータベースを使用しています。誰かがアプリの1つに入り、IPをデータベースに保存するときに、Session_Db_Adpaterを機能させようとしました。
次に、彼が別のスクリプトを入力すると(その別のスクリプトで)、テーブルにレコードがあるかどうかを確認し、ある場合、スクリプトはそのレコードに対してアクティブなセッションを作成するか、新しいレコードを作成しないかどうかを確認します。
試行 1: session_data を古い ID から新しい ID に単純に更新しようとしましたが、$db->update() が true を返すにもかかわらず、session_data は更新を拒否します。
試行 2 Session_SaveHandler_DbTable をオフにしてこれを試しました。最終的には同じドメインにあるためです。
Zend_Session::setOptions(array('cookie_domain' => '.example.com'));
Zend_Session::start();
まだ何もありません。
試行 3 Zend_Session::setId(); を使用しました。
$db = Zend_Registry::get('users_db');
$test = $db->select()->from('session')->where('ip = ?', $_SERVER['REMOTE_ADDR']);
$row = $db->fetchRow($test);
if($row) {
Zend_Session::setId($row['session_id']);
} else {
Zend_Session::start();
$db->update('session', array('ip'=>$_SERVER['REMOTE_ADDR']), 'session_id = "'. Zend_Session::getId() .'"');
}
そして、2〜5分間動作し、次のエラーがスローされます:セッションはすでに開始されています。最初にセッション ID を設定する必要があります。
たとえば app3.example.com で入力すると、セッションがデータベースに行を挿入しないことに気付きました。いくつかのテスト クエリを確認して動作するため、アダプタは正常に動作しています。
私は次のような SessionHandler 構成を入れました:
$config = array(
'db' => Zend_Registry::get('users_db') , //or alone 'main_db'
構成の残りの部分は、参考としてデフォルトです。
助けてください。