Я читал везде, что для правильной работы сессий необходимо вызывать session_start
перед выводом любого html.PHP session_start после вывода html
Например, этот вопрос: "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_destroy
называется, любые дополнительные данные, хранящиеся в $_SESSION
не будут сохранены (т.е. дополнительные изменения в $_SESSION
не будут отражены в следующий раз, когда мы используем переменную $_SESSION
с другой страницы.)?
Проверьте свое [output_buffering] (http://php.net/manual/en/outcontrol.configuration.php#ini.output-buffering) ini. Если он установлен на что-то вроде 'on' или значение int, то вы можете делать такие ошибки ... – Zimmi
По ошибкам, я полагаю, вы имеете в виду, что это не ожидаемое поведение? –
Должен был процитировать это слово;). Под «ошибками» я подразумеваю эффективное создание вывода и отправку заголовков. Заголовки следует отправлять перед выходом html. Буферизация вывода - это параметр, который может быть совершенно другим (установленным или не установленным и изменяющимся в размере буфера) в зависимости от сервера или хостинга, и вы не должны полагаться на него или явно устанавливать его. – Zimmi