2017-06-13 3 views
0

PHPセッション変数はサーバー間で転送されません。これは単純な例で、私はそれが動作するかどうかを確認するために使用しています。見てください。 (別のサーバー上)PHPセッションはサーバー間では動作しません

file1.php

<?php 
    session_start(); 

    $_SESSION['FirstName'] = Kshitij ; 
    $_SESSION['LastName'] = Kawatra ; 
    echo session_id(); 
    echo "<p>First Name is: " . $_SESSION['FirstName'] . "</p>" ; 
    echo "<p>Last Name is: " . $_SESSION['LastName'] . "</p>" ; 
?> 
<p>Go to the <a href="https://<server-ip>/file2.php">next page</a>.</p> 

file2.php

<?php 
    session_start(); 
    echo session_id(); 
    echo "<p>The FirstName session variable is: " . $_SESSION['FirstName'] . "</p>"; 
    echo "<p>The LastName session variable is: " . $_SESSION['LastName']. "</p> "; 
?> 

でもセッションIDが一致しません。

+2

どのようにセッションが機能するようにサーバーを接続しましたか?ロードバランサの背後にあるのか、別のホスト名になっていますか?デフォルトでは、セッションは決してサーバー間を移動することはできません。 –

+0

あなたはこの場合にセッションを使用したいですか? –

+0

@samiサーバーには2つの異なるホスト名があります。セッション変数をデータベースに保存したいのですが、データベースからデータを取得する方法がわかりません。 – kkawatra

答えて

2

セッションは、デフォルトでホストまたはサーバー間を移動しません。セッションを処理するためにCookieを使用している場合、Cookieは元のサーバー(簡易版)にのみ送信されます。別のホスト/ IPに移動すると、ブラウザーは当然他のホストからのCookieをそのサイトに送信しません。もし彼らが誰でもあなたのすべてのアカウントとログインを取得し、それらを乱用することができたら。

サーバー間でセッションを転送する場合は、何らかの方法で接続する必要があります。完全に分離されている場合は、たとえば、URLのトークンを2番目のサーバーに送信し、最初のサーバーから必要な情報を取得することができます。使用するシステムは、実際に達成しようとしているものによって異なります。

+0

それは良い選択ですが、私はそれが非常に安全だとは思わないです。 – kkawatra

+0

@kkawatra安全にすることができます。これは、認証/ SSOシステムが動作する回数です。トークンの生成とデータ転送をどのように処理するかについてはすべてです。 –

+0

あなたは、最も効率的で安全なと思われるいくつかの例を共有してもよろしいですか? – kkawatra

2

このすべての最初には、あなたがsession_set_save_handlerまたはmemcached

+0

私が間違っている場合は私を修正してください。セッションハンドラを使用し、セッションデータをserver1からデータベースに保存する場合さて、もし私がserver2のセッションハンドラを使ってそのデータを取得したいのであれば、クエリをフィルタするためにserver1からのセッションIDかいくつかのデータが必要になります。その場合、2つのサーバー間でセッションIDを別の方法で転送する必要があります。 – kkawatra

+0

@kkawatraはいセッション名またはIDが必要です –

+0

セッション名またはIDを転送する最も良い方法は何でしょうか? – kkawatra

2

PHPのセッションは、デフォルトでは一つのサーバに対してローカルな別のセッションハンドラを使用することができますhttp://php.net/manual/en/session.examples.basic.php

デフォルトのセッションの振る舞いでは不可能です。複数のサーバーで直接使用することはできません。

そうしたい場合は、別のセッションハンドラを使用する必要があります。

は、ここに詳細を参照してください:How to manage a single PHP5 session on multiple apache servers?

2

は、サーバー間で通信するための方法がありますが、セッションは1ではありません。 PHPセッションは、実際には、セッションの寿命が異なる可能な方法でリフレッシュされるメモリ空間であり、このメモリはサーバ側のみであり、PHPコードを実行するサーバのみです。

最も良い方法は、これらの2つのサーバー間にソケットを作成し、これらの2つのサーバー間のセキュリティレイヤーを介して通信することです。

http://php.net/manual/en/function.socket-create.php

最も簡単な方法は、REST APIを作成し、JSONの出力はHTMLのクエリ文字列から来ると、それを介して通信することです。

Returning JSON from a PHP Script

関連する問題