PHP でセッションを利用するには session_start() を使う。
しかし、次のコードを実行するとエラーが発生。
こんにちは <?php session_start(); ?>
結果は、
こんにちは Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:XXXXXX\test.php:2) in C:XXXXX\test.php on line 3
これは 初めてのPHP5 (p164) によると、
HTML の前はヘッダを含む応答の一部です。ヘッダは画面には表示されませんが、Web クライアントからサーバへの命令や情報になります。…
Web サーバから Web クライアントへの応答ヘッダはすべて、応答の始めにあるべきです。… 一度、本文が送られると、たとえそれが 1 行であっても、それ以上ヘッダが送られることはありません。…
setcookie() や session_start() のような関数は応答にヘッダを追加します。追加されたヘッダが適切に送られるためには、出力の開始前に追加されなければなりません。…
ブランク行であっても、<?php ?> タグの外側には何もないことをチェックしましょう。
上記のヘッダとは[Studying HTTP] HTTP Header Fields による、
クライアントとサーバは、HTTP ヘッダを使ってデータやソフトウェア自身の情報をやりとりしていきます。 HTTP/0.9 では、データの取得のみを目的としていたので、HTTP ヘッダというものは存在しませんでした。しかし、WWW が活用され始め、そのリソースに関連する情報 (例えば、返されるリソースのサイズやその更新時刻等) や、クライアント側の情報 (例えば、ユーザエージェントの種類やそれを参照するリソースの URL 等) をやりとりしたいと思うようになり、実際のリソースとは別のメタ (外部) 情報を扱うものとして、HTTP ヘッダが開発されたのです。
PHP: session_start – Manual の注意をよく読むと、
注意: クッキーに基づくセッションを使用している場合、ブラウザに何か出力を行う前に session_start() をコールする必要があります。
呼出すタイミングには注意が必要。状態を考えてコーディングしないといけないのはやっぱ面倒だなぁ。。 (+_+)
0コメント:
コメントを投稿