12 August 2008

(PHP) レンタルサーバでCookieが使えない

共用レンタルサーバでCookieが使えないことがある。
画面遷移のあるアプリケーションで、セッション変数を引き継ぐ時に、わざわざリンクを <a href="test1_receive.php?<?=SID?>"> と明示的にセッションIDを引き継ぐ必要が出てきたりする。

こういう場合には、システムのphp.iniを、ユーザのphpスクリプトのあるディレクトリにコピーしてきて


%cp /usr/local/php-5.2.6/lib/php.ini ./

php.ini の次のところを変更するとうまく行くかもしれない…
(Googleで検索して、他のうまく行っているサーバで比較して、なんとなく分かった解決法)

./php.ini

// 出力バッファを最大値 4096バイトにする
; output_buffering = Off
output_buffering = 4096

// セッション変数引渡しを、Cookieに任せる場合
session.use_cookies = 1

出力バッファのほうは、バッファ無しでどうしてCookieが書き込まれないのか… 狐につままれたような解決方法だが、PHPの公式マニュアルによれば、php.iniで設定する以外にも、ob_start() で強制的にバッファリングを開始して、処理終了時に ob_end_flush() 関数を呼ぶという方法もあるそうである。