0

倉庫管理用の非常に単純な PHP ベースのプログラムを作成していますが、バックエンド プロセスは非常に複雑です。

だからここに状況があります:

  1. session_name初めて設定する認証ページに移動するログインページがありsession_start()、セッション変数を設定します。

  2. 認可ページの後、左側にメニュー(リンク)のテーブルである main.php ページに移動しますsession_name()<-- (1) で作成したものと同じ名前で、セッションを開始します。

  3. メイン ページの右側には、ユーザーが左側のリンクをクリックしたときにページを表示する iframe があります。<-- (1)で作成しsession_name()たものと同じ名前を付けて、セッションを開始します。

問題:

main.php は問題ありません。セッション変数を完全に読み取りますが、iframe はセッション変数を取得できませんでした (試してみたところprint_r($_SESSION)、空になりました)。var_dump(session_name("abc"))ここで、「abc」は(1)で使用したセッション名であり、「abc」を表示し、()を試してisset($_SESSION)trueを返します...だから、何が間違っているのかわかりません...


編集:申し訳ありませんが、犯人を見つけた可能性があります...それは私の側の論理エラーです...ユーザーレベルが許可されていない場合にセッションを破棄するために作成したすべてのphpページをチェックするこの条件がありますこの現在のページを使用します。私の悪い..あなたの助けてくれてありがとう!!

4

4 に答える 4

3

session_start()すべてのページにあることを確認します。

session_start() は、GET または POST リクエストを介して渡された、または Cookie を介して渡されたセッション ID に基づいて、セッションを作成するか、現在のセッションを再開します。

PHP マニュアル リファレンスを参照してください

$_SESSION の内容を制御するには、すべての ireame ページに次のコードを挿入してみてください。

<?php 
   session_start();

   echo '<pre>';
   var_dump($_SESSION);
   echo '</pre>';
于 2013-07-26T08:04:37.523 に答える
0

PHP Webページの1つで複数のiframeで同じ問題が発生しました。

私の場合、http://example.comを使用してページがロードされたときに、PHP エンドポイントへの AJAX 呼び出しが www.example.com に対して行われていました。ドメイン パスと一致していない場合、 www.example.com からのリクエストは、http://example.comから直接行われるのではなく、技術的にはサブドメインからのものであるため、セッションの問題が発生する可能性があります。JavaScript で AJAX 呼び出しを行うときに、常に PHP ベースの API への相対パスを使用することで、この問題を完全に回避できます。

Chrome で Cookie を調べると、これが当てはまることがわかりました。異なる PHP セッション ID を持つ 2 つの異なる Cookie に気付きました。1 つは www.example.com に設定され、もう 1 つは example.com に設定されました。

他の回答のいくつかで述べたように、次を使用して、メイン サイトとともにすべてのサブドメインで動作するようにセッション Cookie ドメインをいつでも設定できます。

ini_set("session.cookie_domain", ".domain.com");

デフォルトでは、PHP はドメイン/サブドメインごとに新しいセッションを設定します。お役に立てれば!

于 2016-10-29T05:34:45.293 に答える