session_start();
if (!isset($_SESSION['order_s'])) {
$_SESSION['order_s'] = rand(1111111111,9999999999);
echo "new";
}
else echo $_SESSION['order_s'];
Каждый раз при обновлении страницы или переходе. Выдает "new", то есть сессия не сохраняется.
Подскажите пожалуйста, в чем ошибка?
Спустя 2 минуты, 2 секунды (28.11.2011 - 21:58) Winston написал(а):
А до session_start(); нету никакого вывода на экран ?
Спустя 9 минут, 58 секунд (28.11.2011 - 22:08) MaximGQ написал(а):
Этот код находится в файле header.php(в самом файле перед этим кодом только код для работы с MySQL, потом соответственно код и далее шапка страницы). Этот файл с помощью include включен во все страницы сайта. в самое начало страницы после <body>. До него соответственно куча всего.
Попробовал сейчас открыть header.php отдельно - сессия сохранилась и передается по всем страницам. Но пользоатели же не будут хеадер первой загружать. А выносить в index.php тоже не выход, потому как пользователь может оставить страницу открытой и на след день продолжить Есть ли выход?
Попробовал сейчас открыть header.php отдельно - сессия сохранилась и передается по всем страницам. Но пользоатели же не будут хеадер первой загружать. А выносить в index.php тоже не выход, потому как пользователь может оставить страницу открытой и на след день продолжить Есть ли выход?
Спустя 3 минуты, 51 секунда (28.11.2011 - 22:11) Winston написал(а):
Цитата (MaximGQ @ 28.11.2011 - 21:08) |
Есть ли выход |
Да, есть, поместить session_start до любого вывода на экран.
Также прописав
error_rporting(E_ALL);
Ты увидишь предупреждение, что сессия стартует после того как уже было, что-то выведено на экран.
Спустя 2 минуты, 17 секунд (28.11.2011 - 22:14) MaximGQ написал(а):
Или этот код только нужно вносить на все страницы без включения с header? Хотел чтоб меньше кода у меня было, к тому же хеадер везде повторяется. сейчас попробую сделать включение header в самом начале кода, а не после body. Я так делал на какой-то странице, но она у меня отображаться некорректно стала, дополнительные отступы стали появляться, смещения и т.д.
Спустя 2 минуты, 27 секунд (28.11.2011 - 22:16) MaximGQ написал(а):
Если в отдельный файл вынести сессии, а также код типа
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
И включить этот файл в самом верху кода - проблем быть не должно? И с MySQL тоже если это вынести?
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
И включить этот файл в самом верху кода - проблем быть не должно? И с MySQL тоже если это вынести?
Спустя 1 минута, 46 секунд (28.11.2011 - 22:18) Nikitian написал(а):
Цитата (MaximGQ @ 28.11.2011 - 22:08) |
в самое начало страницы после <body>. До него соответственно куча всего. |
Самое начало - это когда перед ним нет никакого вывода: ни echo/print etc, ни пробелов, переводов строк, BOM-меток вне php-кода.
Спустя 2 минуты, 38 секунд (28.11.2011 - 22:20) MaximGQ написал(а):
BOMов нет нигде. А почему так? Почему сессии после другого кода не работают?
Спустя 4 минуты, 8 секунд (28.11.2011 - 22:25) Nikitian написал(а):
После вывода. Как вариант, можно сделать буферизацию данных и стартовать сессию, ставить куки, устанавливать хедеры практически где угодно.
Подробнее о буферизации вывода тут
Подробнее о буферизации вывода тут
Спустя 5 минут, 15 секунд (28.11.2011 - 22:30) johniek_comp написал(а):
MaximGQ
так задано по умолчанию! не будешь же ты штаны через голову одевать? если не работает смени кодировку на ютф без бом, т.к. там пробел будет и сессия не будет работать, а что бы увидеть при отладке пиши error_reporting(E_ALL);
так задано по умолчанию! не будешь же ты штаны через голову одевать? если не работает смени кодировку на ютф без бом, т.к. там пробел будет и сессия не будет работать, а что бы увидеть при отладке пиши error_reporting(E_ALL);
Спустя 4 минуты (28.11.2011 - 22:34) MaximGQ написал(а):
Спасибо Всем за помощь. Буду вносить этот код во все страницы...