セッションが正常に動作するためには、htmlを出力する前にsession_start
を呼び出す必要があります。たとえば、この質問htmlを出力した後のPHPのsession_start
を:"Cannot send session cache limiter - headers already sent"
しかし、この例では、それをしないと、それは動作します:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Counting with the SESSION array</title>
</head>
<body>
<FORM action="counter-session.php" method="GET">
<INPUT type="submit" name="Count" value="Count">
<?php
session_start();
if (! isset($_SESSION['counter']))
$count = 0;
else
$count = $_SESSION['counter'];
$count = $count + 1;
$_SESSION['counter'] = $count;
echo "count is $count";
?>
</FORM>
</body>
</html>
、期待通りにカウンタが増加していること。どうして?
追加の質問:それは(すなわち$_SESSION
へのさらなる変更は、我々は別のページから$_SESSION
変数を使用して、次回に反映されません。)session_destroy
が呼ばれた後、$_SESSION
に格納されている任意の更なるデータが保存されないというのは本当ですか?
[output_buffering](http://php.net/manual/en/outcontrol.configuration.php#ini.output-buffering)ini設定を確認してください。 'on'やint値のようなものに設定されていれば、この種の間違いをすることができます... – Zimmi
間違って、これは期待された動作ではないと思いますか? –
その単語を引用する必要があります;)。 「間違い」とは、効果的に出力を作成し、ヘッダーを送信することを意味します。ヘッダーはhtml出力の前に送信する必要があります。出力バッファリングは、サーバーやホスティングによって大きく異なる(設定または未設定、およびバッファのサイズが変更される)設定であり、明示的に設定する必要はありません。 – Zimmi