10

現在、2 つの Web サイトを開発しており、に接続してデバッグしていますlocalhost

最初のサイトは で参照されhttp://localhost/web1、2 番目のサイトは で参照され http://localhost/web2ます。

3 つのドメイン固有のセッション変数が設定されているそれぞれのログイン スクリプトを作成しました。

  1. $_SESSION['web1_user']
  2. $_SESSION['web1_login']
  3. $_SESSION['web1_sessionID']

ただし、同じブラウザで両方のサイトにログインし、一方のサイトからログアウトすると (起動すると、 2 つ目のサイトからも自動的にログアウトされます。session_destroy()

この問題をどのように解決できるかについてのアイデアは、非常に高く評価されます。:(

4

9 に答える 9

9

ああ、共有ホスティングの楽しみ!最善の方法は、実際に両方のサイトに同時にログインする必要がある場合は、サイトごとに異なるブラウザーを使用することです...

ただし、これが重要である理由を説明するには、次のことを理解する必要があります。

Session変数はサーバーに保存され、キー付き参照はサーバーに保存され、Cookie はブラウザーに保存されます。2 つのうちのいずれかを設定解除して破棄すると、マッチを行うことができなくなり、セッションが失われます。

session_start();
session_unset();
session_destroy(); 

上記は、サーバーをブラウザーにリンクするすべてのセッション変数を (サーバー側で) 強制終了します。

これを簡単に管理する方法は、セッション変数を別の配列セットにすることです。

$_SESSION["site1"] = array( $user_id, $session_id );
$_SESSION["site2"] = array( $user_id, $session_id );

もちろん、派手にすることもできます:

$_SESSION['site3']['userID']    = 'someuserid';
$_SESSION['site3']['sessionid'] = 'somesessionid';

次に、サイト1からログアウトすると

session_start();
unset($_SESSION['site1']);

この場合、サイトごとに個別のセッション管理システムを作成しました (2 次元配列を使用し、その最上層はサイトの識別子によってキー化されます)。これにより、各サイトが個別のセッション変数セットを管理できるようになり、1 つを破棄すると、他のサイトには影響しなくなります。

ただし、代わりに (または追加で) 別のブラウザーを使用することをお勧めします...

于 2012-10-30T00:37:36.093 に答える
3

私は最近、あなたの質問に関連する問題を解決しました。もともと、私はあなたが説明しているものに似た実装を探していましたが、かなりの検索を行った後、これが私が思いついたものです:

サイト 1 :

ini_set("session.cookie_domain", "yourdomainname");
$some_name = session_name("some_name");
$domain = 'your domain name';
session_set_cookie_params(0, "/", $domain);
session_start();
$_SESSION['user']=$_POST['user'];
$_SESSION['password']=$_POST['password'];

サイト 2 :

$some_name = session_name("some_name");
ini_set('session.cookie_domain', 'yourdomainname');
session_start();
echo $_SESSION['user'];
echo $_SESSION['password'];

この変更は私にとってはうまくいきました - そして私の推測では、それはあなたにも役立つでしょう.

于 2012-10-15T06:44:26.360 に答える
1

使用する

session_name('web1');

session_start();

于 2012-10-15T06:37:09.170 に答える
0

またはを介し​​てsession_name()、各アプリで異なるセッション名を設定します。session.name

于 2012-10-15T06:32:34.727 に答える
0

あなたはこれを使うことができます

ini_set("session.cookie_domain", ".example.com"); 
于 2012-10-15T06:33:45.990 に答える
0

サイトごとに別のホストを作成する必要があります

この場合、localhost という同じホスト上で 2 つのサイトが実行されているため、同じホスト名のセッションが共有されます。

于 2012-10-15T06:46:40.117 に答える
0

2 番目のドメインにセッション開始のファイルを含めます。

web1 にはセッション開始ファイルが含まれ、web2 には include('../web1/session.php');

于 2012-10-15T07:11:53.523 に答える
-1

使用した最初の Web サイトと使用できる 2 番目の Web サイトのように、すべての Web サイトで異なるセッション名を使用$_SESSION['web1_user'], $_SESSION['web1_login'], $_SESSION['web1_sessionID']できます。$_SESSION['web2_user']

私はすでにこの問題に直面しており、別の名前のセッションを使用して解決しました。

于 2012-10-15T06:36:29.793 に答える
-2

Bezのセッションは同じブラウザ内で共有されているため、1つのタブからログアウトすると他のタブもログアウトされ、

例: Chrome でログインし、別の Chrome で開くと、セッションが共有されているため、一方からログアウトすると、もう一方も自動的にログアウトされます!

于 2012-10-15T06:31:42.993 に答える