1

ローカルホストを介してWebサイトの1つに対して次の方法でコーディングしてみました。localhost / abcと言います:

<?php
session_start();
$_SESSION['name']=$row['name']
?>

出力は良かった。ただし、同じローカルホスト上の別のWebページに同じコードが使用された場合は、localhost/xyzと言います。次に、名前の間にあいまいさがありました。xyzとabcのセッションを区別する必要があるかのように。

だから私はこれを試しました:

<?php
session_id(226);
session_name(veer);
session_start();
.
.
.//connection with database and all
.
$_SESSION['name']=$row['name'];
echo($_SESSION['name']);
?>

別のマシンが同じサーバーにログインすると、同じWebページでそのマシンから作成したセッションにアクセスできました。

解決策はありますか?または、2つのセッションを区別する方法。

4

4 に答える 4

3

簡単に言うと...同じブラウザインスタンスを使用して同じWebサーバー上の2つの異なるサイトにアクセスすると、サーバーの同じメモリ領域にアクセスします。したがって

http://localhost/xyz同じサイトのローカルホストを参照してhttp://localhost/abcいるため、別のセッションを開始するのではsession_start()なく、再開します。Jonが言ったように、代わりに仮想ホストを作成することもできますが、私が推測するテストのために、別のブラウザーを使用するだけです。

また、通常は別のマシンでセッションを共有することはできないので、それは論理的な間違いだと思います。または、試してみてください

session_start();
echo (session_id());

ページの上部に表示され、同じセッションを開始または再開しているかどうかを確認しますが、そうではないと思います。あなたのページは、あなたが同じセッションと間違えた異なるセッションに同じデータを保存していると思います。

于 2012-05-24T10:45:24.173 に答える
1

session_regenerate_id();2番目のファイル(xyz)のメソッドを使用します。

于 2012-08-10T14:08:46.053 に答える
0

同じユーザーエージェントから同じWebサーバーへのリクエストは同じセッションを共有し、サーバーの正確な設定に依存する明示的な構成を除きます。

通常、この問題は回避されます。これは、「他のWebページ」が実際には完全に別のドメインにあり、セッションCookie(および拡張機能としてセッションデータ)が共有されないためです。これは、個別のアプリケーションを個別に実行する場合にも実行する必要がありlocalhostます。個別の内部ドメインに個別の仮想ホストを設定します。

$_SESSIONまた、データを直接保存するために使用するのではなく、などの差別化要因に基づくサブキーを使用して、純粋にコードで問題を解決することもできます$_SESSION['SCRIPT_NAME']。非常に簡単な例:

$sessionKey = "default";
if (strpos($_SESSION['SCRIPT_NAME'], "dir1/")) {
    $sessionKey = "dir1";
}
else if (strpos($_SESSION['SCRIPT_NAME'], "dir2/")) {
    $sessionKey = "dir2";
}

$_SESSION[$sessionKey]['mydata'] = 'foo';

ただし、この最後のソリューションは、私がお勧めしない本当にエレガントでないソリューションです。

于 2012-05-24T10:20:30.783 に答える
0

これ?

<?php
session_start();
if (!isset($_SESSION['xyz'])) { $_SESSION['xyz'] = array(); }
$_SESSION['xyz']['name'] = $row['name'];
?>

上記を行う代わりに、セッションキーの例にプレフィックスを付けることがあります。$ _ SESSION ['xyz_name']; 私のCPanelがそれ自体のいくつかのセッションで使用されており、それが私の競合を引き起こしていることに気付いた後、私はそれを行いました。

于 2012-05-24T10:15:49.750 に答える