• ベストアンサー

セッションとヘッダーの順序について

session_name("WebID"); session_start(); を header("Content-Type: text/html; charset=UTF-8"); のあとに呼び出すとエラーになります。 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\php\index.php:56) in C:\xampp\htdocs\php\verify.php on line 3 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\php\index.php:56) in C:\xampp\htdocs\php\verify.php on line 3 やはりセッションを先に呼び出さないといけないのでしょうか? session_unsetというものを使えばこの順序でもうまくいきますか? index.phpからエラーが起きたファイルを表示させているので、 順序は変えにくいのですが、順序を変えなくてもクリアできる 方法があったら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

セッションは設定にもよりますが、クッキーを利用します。 クッキーをブラウザに食べてもらうにはContent-Typeの前でなくてはならない約束があります。 セッションは「同一ユーザである事をユーザに教えてもらう手間」をセッションIDを利用することによって省くものです。クッキーを利用せずにセッションIDをやり取りすると出来ますが、そのためにはGETパラメタでセッションIDを管理するなど、手間がかかります。 よって、 > 順序を変えなくてもクリアできる > 方法があったら教えてください。 は難しいという事になります。 もしどうしても、という事であれば、インナーフレームを使うとか、AJAXを使うなどが回答になるかもしれません。もちろん手間がかかります。

その他の回答 (1)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

出力のバッファリングを使用すればできるかと。 ob_start() を全てのコード(header,cookie,その他ページデータ)より前に記述し、ページの最後に ob_end_flush() をスクリプトでコールすれば、最後のコール時に、header用設定をまず出力してから、ページデータの出力が行われます。

参考URL:
http://jp.php.net/manual/ja/function.ob-start.php

関連するQ&A