Подтвердить что ты не робот

Идентификатор сеанса слишком длинный или содержит недопустимые символы, действительными символами являются a-z, A-Z, 0-9 и '-,'

Как решить:

Предупреждение: session_start() [function.session-start]: идентификатор сеанса слишком длинный или содержит недопустимые символы, допустимые символы: az, AZ, 0-9 и "-" в строке..... on line 3

Предупреждение: session_start() [function.session-start]: не удается отправить cookie сеанса - уже отправленные заголовки (вывод запущен в......: 3) в строке..... по строке 3

Предупреждение: session_start() [function.session-start]: Не удается отправить ограничитель кеша сеанса - уже отправлены заголовки (вывод запущен в.....: 3) в строке..... в строке 3

4b9b3361

Ответ 1

посмотрите на session_start() обсуждение для работы:

session_start() генерирует предупреждение, если PHPSESSID содержит недопустимые символы

Предупреждение: session_start() [function.session-start]: идентификатор сеанса содержит недопустимые символы, допустимые символы: az, AZ, 0-9 и '-,' в /home/para/dev/mon _site/header. php в строке 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;
        }
    ?>

Ответ 2

Это уязвимость в информации, вредоносный злоумышленник может изменить файлы cookie и назначить незаконные символы PHPSESSID, чтобы разоблачить это предупреждение PHP, которое на самом деле содержит сочную информацию, такую ​​как путь к файлу и имя пользователя!

Ответ 3

Для этой проблемы есть отчет об ошибке (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(); 
}

Ответ 4

Я отредактировал предыдущее решение 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();
}

Ответ 5

Я предлагаю использовать "более правильную" версию функции.

Несколько примечаний:

  • Более правильное регулярное выражение (позволяет символы в диапазоне a-z A-Z 0-9, (запятая) и - (минус)), как описано здесь.
    Регулярное выражение зависит от настроек php ini, как описано здесь и здесь.
  • Использовать метод имени сеанса

Таким образом, обновленная версия выглядит следующим образом:

<?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;
    }
?>

Ответ 6

Если вам не нравятся другие пользователи (например: если это частный интерфейс), просто проверьте браузер, найдите файл cookie PHPSESSID (или имя, которое вы ему дали), удалите его и обновите.

Ответ 7

Я пришел с этим простым методом, просто попробую и поймаю начало сеанса, и если есть проблема, восстановите сеанс.

try {
   session_start();
} catch(ErrorExpression $e) {
   session_regenerate_id();
   session_start();
}