8

サーバー間でユーザー セッションを転送する必要があります。すなわち。ユーザーが server1 にログインし、ユーザーが server2 に存在する場合、ユーザー セッションの詳細を server2 に転送する必要があります。このために、次の手法を使用しました

server1 から、ユーザーをhttp ://server2/auth_from_server1.php?sessionid=12345にリダイレクトし ますsessionid、12345. server1 では、check_session_id.php の実装で、ID を検証し、OK、FAILURE、およびユーザー名などの渡したいセッション関連データを返します... server2 では、呼び出しが OK で返される場合、転送されたセッション データを保存し、ユーザーにこのサーバーの Cookie とセッションを提供します。

しかし、コールバック関数が auth_from_server1.php を呼び出すと、セッション ID の値は null になります。セッションIDを次のように確認しようとしました

if(isset($_SESSION['sessionId']))
echo 'true';
else
echo 'false';

しかし、$_SESSION['sessionId'] は null です。ログインページで、セッションIDの値を次のように設定しています

$_SESSION['sessionId'] = session_id();

前もって感謝します....

4

6 に答える 6

17

セッションデータを共有ディレクトリに保存する方が簡単ではないでしょうか?

または、データベースに保存することもできます。

于 2010-12-13T10:53:33.387 に答える
7

カスタム PHP セッション ハンドラを作成するか、ShareDanceのような事前構築済みのセッション ハンドラを使用することをお勧めします。2 台のマシン間で共有される MySQL データベース、SQLite ファイルなどにセッション情報を保存できます。

session_set_save_handler() を使用してセッション データを取得/設定する PHP の組み込み機能を使用すると、多くの利点があります。つまり、$_SESSION から取得または設定するすべての呼び出しが、追加の変更なしでアプリケーション コードで機能します。

詳細については、http: //php.net/manual/en/function.session-set-save-handler.phpを参照してください。

カスタム セッション ハンドラーの作成に関するチュートリアル (古いですが、まだ関連があります) は次のとおりです: http://devzone.zend.com/article/141

于 2010-12-13T11:21:26.053 に答える
3

サーバー 2 が server1/secret/check_session_id.php を呼び出す場合、server1/secret/check_session_id.php?sessionid=12345 のようなセッション ID を送信する必要があり、check_session_id.php ではsession_id($_GET['sessionid'])前に呼び出す必要がありますsession_start()

于 2010-12-13T10:56:23.423 に答える
3

This problem can quickly get out hand when you start adding more and more severs to the problem. One of the best solutions that I have found is to store the session on a database and share that database with the servers. Redis typically works great for this. Here is a great guide to get started with redis

于 2015-02-12T22:28:13.383 に答える
2

ユーザーのIDをDBに保存するのが最も適切な方法だと思います。これはエラー防止の方法です。

乾杯

于 2015-02-10T10:16:14.127 に答える