phpのセッションがheader遷移のリダイレクトで引き継げない場合

こんな感じでログインのセッションを発行する処理がありまして。
login.php

$_SESSION['user'] = $_POST['user'];
header("Location: toppage.php");
exit;

POSTでユーザーIDを受け取って、それをセッションに入れてログイン後のトップページに遷移する、という処理ですな。
でtoppage.phpでは、セッションの有無を判定して、なければこのログインページに差し戻す、という寸法。

ところがこれが、どうにもうまく行かない。ログイン情報は合っているのに、ログイン後のページに進めない。var_dumpしてよく見てみると、遷移後のページではSESSIONがNULLになってしまっている。うーむ困った。

解決した方法

$_SESSION['user'] = $_POST['user'];
session_write_close();
header("Location: toppage.php");
exit;

セッションを書き込んだら、「session_write_close」関数を使って、明示的に「セッションの書き込みはこれでおしまい」と指定してあげるとうまく行った。

追記:もう一つの方法

「この方法ではうまくいかなかった」という方から、コメント欄で情報提供いただきました。

広告

やることは簡単で、リダイレクトする次のファイルの先頭でsession_start();と書いてセッションを開始することを明示したら僕はいけました👍

うまくいかなかった方はお試しあれ。

About: dacelo


2 thoughts on “phpのセッションがheader遷移のリダイレクトで引き継げない場合”

  1. 僕も同様の問題に遭遇して、最初にこの記事を参考にしましたが、僕の場合はこの記事の方法では解決できませんでした泣
    そのあと調査を続けて、次の方法で解決したので僕と同様に同じ問題でこの記事に辿り着いた人のためにもう1つ解決策を残しておきます。

    やることは簡単で、リダイレクトする次のファイルの先頭でsession_start();と書いてセッションを開始することを明示したら僕はいけました👍

    1. おお、なるほどそのような解決法がありましたか。
      情報提供ありがとうございます。
      追記します。

Leave a Reply

Your email address will not be published. Required fields are marked *