Как решить :
Предупреждение: session_start () [function.session-start]: идентификатор сеанса слишком длинный или содержит недопустимые символы, допустимые символы – az, AZ, 0-9 и «-» в ….. на строке 3
- Совместная сессия между двумя веб-сайтами
- запретить прямой доступ к php-файлу, набрав ссылку в URL-адресе
- PHP: сеанс не работает
- unset multimimensional array
- PHP $ _SESSION Возвращение пустого массива даже когда значения заданы
Предупреждение: session_start () [function.session-start]: не удается отправить сеанс cookie – заголовки, уже отправленные (вывод запущен в ……: 3) в строке ….. на строке 3
Предупреждение: session_start () [function.session-start]: не удается отправить ограничитель кеша сеанса – уже отправленные заголовки (вывод запущен на …..: 3) в строке ….. по строке 3
session_start()
этим обсуждением session_start()
для работы:
session_start()
генерирует предупреждение, если PHPSESSID содержит недопустимые символыПредупреждение: session_start () [function.session-start]: идентификатор сеанса содержит недопустимые символы, допустимые символы: az, AZ, 0-9 и '-,' в /home/para/dev/mon_site/header.php on line 17
Чтобы избежать этого, я написал следующее:
<?php function my_session_start() { if (ini_get('session.use_cookies') && isset($_COOKIE['PHPSESSID'])) { $sessid = $_COOKIE['PHPSESSID']; } elseif (!ini_get('session.use_only_cookies') && isset($_GET['PHPSESSID'])) { $sessid = $_GET['PHPSESSID']; } else { session_start(); return false; } if (!preg_match('/^[a-z0-9]{32}$/', $sessid)) { return false; } session_start(); return true; } ?>
Это уязвимость в информации, злоумышленник может изменить файлы cookie и назначить незаконные символы PHPSESSID, чтобы разоблачить это предупреждение PHP, которое на самом деле содержит сочную информацию, такую как путь к файлу и имя пользователя!
Для этой проблемы есть отчет об ошибке ( https://bugs.php.net/bug.php?id=68063 )
Вы можете проверить успех своего session_start и сгенерировать идентификатор, если необходимо:
$ok = @session_start(); if(!$ok){ session_regenerate_id(true); // replace the Session ID session_start(); }
Я отредактировал предыдущее решение Andron ! (исправить возвращаемое значение) и добавил результат оценки my_session_start (). Предыдущее решение решения проблемы с сообщением об ошибке, но мне нужно, чтобы сессия началась.
/** * @return boolean return TRUE if a session was successfully started */ function my_session_start() { $sn = session_name(); if (isset($_COOKIE[$sn])) { $sessid = $_COOKIE[$sn]; } else if (isset($_GET[$sn])) { $sessid = $_GET[$sn]; } else { return session_start(); } if (!preg_match('/^[a-zA-Z0-9,\-]{22,40}$/', $sessid)) { return false; } return session_start(); } if ( !my_session_start() ) { session_id( uniqid() ); session_start(); session_regenerate_id(); }
Я предлагаю использовать «более правильную» версию функции.
Несколько примечаний:
Поэтому обновленная версия выглядит так:
<?php function my_session_start() { $sn = session_name(); if (isset($_COOKIE[$sn])) { $sessid = $_COOKIE[$sn]; } else if (isset($_GET[$sn])) { $sessid = $_GET[$sn]; } else { session_start(); return false; } if (!preg_match('/^[a-zA-Z0-9,\-]{22,40}$/', $sessid)) { return false; } session_start(); return true; } ?>
Если вас не интересуют другие пользователи (например: если это частный интерфейс), просто проверьте браузер, найдите файл cookie PHPSESSID (или имя, которое вы ему дали), удалите его и обновите.
Я пришел с этим простым методом, просто попробую и поймаю начало сеанса, и если есть проблема, восстановите сеанс.
try { session_start(); } catch(ErrorExpression $e) { session_regenerate_id(); session_start(); }