Help us understand the problem. What is going on with this article?

【緊急事態】PHPのセッション変数が引き継げない!!

開発環境で動いていたプログラムが、
本番環境にいったら動かない!!
ということはよくある。

多いのは、どこまでをエラーとして出力するかの定義の差の場合が多い。

昔からの資産があると、どうしてもワーニングが出てしまう事がある。本当はワーニングを出ないようにすべきなのだが。。。

そのような場合、多くは
.htaccessに
php_value error_reporting 30711
と書けば問題は解決してくれる。

しかし、今回は違った、ログインの情報をセッション変数に入れているのだが、リダイレクトするとその情報が引き継げないという現象が起きた。

ネットで調べると、多くはsession_start();の前に、
何かを出力してしまった事が原因という単純なもの。

ようやっと、リダイレクトでうまくいかないとの報告は見つけたが、その解決策は無し。

本番環境の構築の期限は迫っている。

しょうがないので、セキュリティー的にはNGなんだろうが、画面遷移をするためのformを用意して、それを使う事でとりあえず納品とした。

同じプログラムをデモとして別のサーバにもアップした。サーバはmix-host。
ログインなどは問題なく出来ているが、
error.log
なるものが出力されていることに気がついた。

その内容は、

session_start(): Cannot start session when headers already sent in

session_start()が失敗する?

コードは

<?php
session_start();
:

とその前には何もない。

しかし、エラーメッセージから調べると、
ファイルにBOMが付いているとsession_start();が失敗するとのページを見つけた。

セッション変数を引き継げないページのsession idを調べると何も設定されていなかったのを思い出す。

恐る恐るBOMを確認する、付いていた!!

BOMを外してみた。

formが無くても動く!!

シンプルにsession_start();が失敗していたのか。

mix-host を使わないとわからなかった。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした