3


2

リダイレクト後にセッション変数を失う
  1. ユーザーがユーザー名とパスワードを入力します。

  2. 正しい場合、ページは「user_id」などの情報を セッション変数。

  3. このスクリプトは、 `header( 'Location')`リダイレクトを作成します。

  4. どういうわけか次のページはセッションを認識しません…​ どうして?

リダイレクトは同じドメインへであり、すべてのページに「session_start();」があります

そして、私はFFよりもIEで起こる可能性が高いことを発見しました…​ 変です。

6 Answer


7


Cookieが有効になっていない可能性はありますか?

セッション変数を特定のクライアントインスタンスに関連付けることができるようにするため(つまり、 ブラウザとブラウザで競合を起こさずにセッション変数を同時に使用する方法)、セッションごとに「セッションID」(または「SID」)が生成されます。 このIDは、通常はCookieの形式で、サーバーとクライアントに保存されます。 ただし、Cookieが有効になっていない場合、セッションIDは各リクエストのURLのクエリ文字列の一部として渡されるため、サーバーはどのセッションIDがクライアントに属しているかを知ることができます。

`header()`呼び出しによってリダイレクトする場合、PHPは新しいリクエストにSIDを自動的に挿入しないため、次の形式で自分で追加する必要があります。

header("Location: my_url.com/my_page.php?" . SID)

ここで、http://www.php.net/manual/en/session.constants.php [SID]は、クエリ文字列の必要な部分を含むPHPによって定義された定数です(` session_name()と同等)。 '='。 session_id() `、セッションIDが存在する場合)。

詳細については、http://www.php.net/manual/en/session.idpassing.php [セッションIDの受け渡し]を参照してください。


5


私はちょうど同様の問題があり、解決策は_header(..)_リダイレクトの下に_exit(); _命令を追加することでした。


2


二つの考え:

  1. session_start()は、スクリプトの先頭で、何かの前にありますか ブラウザに送信されますか?

  2. ドメインはまったく同じですか? www.mydomain.comへのリダイレクト mydomain.comは、あなたが説明する問題につながります。


1


header("Location: my_url.com/my_page.php?" . SID)
exit();

header();の下に exit() `を追加して初めて機能しました。


0


WordPressのドキュメントには、ユーザーのパスワードが変更されるとCookieがクリアされると記載されています。 リダイレクトが発生するかどうかに関係なく、セッションは強制終了されます。 Cookieがクリアされるのを防ぐことができる限り(および他の回答で示唆されているように、 `exit()`がそれを行う場合があります)、セッションは残ります。

_ 注:現在のユーザーのパスワードが更新されている場合、Cookieはクリアされます! _


0


私は今日この問題を抱えていて、それを修正する方法を探していました。 私はすでに他の人が言ったことをすべて持っていて、どこにも答えを見つけることができませんでした。

最終的に、 `Firebug`でセッション変数を見てから答えを見つけました。 変数が失われているページで、セッション「Parameter:secure」が何らかの理由で「true」に設定されていることに気づきました。

修正*は、セッションが作成される前に「secure」パラメータをfalseに設定することでした

`session_set_cookie_params`を使用してこれを達成しました。 このようなもの:

session_set_cookie_params([lifetime], [path], [domain], false, true);