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」関数を使って、明示的に「セッションの書き込みはこれでおしまい」と指定してあげるとうまく行った。。

広告

About: dacelo


Leave a Reply

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