У меня есть эта функция:
public static function sessionStart()
{
try {
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-zA-Z0-9\-]{32}/i', $sessid)) {
return false;
}
session_start();
return true;
} catch (Exception $ex) {
return false;
}
}
Однако в некоторых случаях session_start
все еще выдает предупреждение. Как я могу проверить идентификатор сессии, чтобы никогда не получать предупреждения? Проблема начала нарастать, когда я изменил версию PHP с 5.3 на 5.6.
Предупреждение:
Идентификатор сеанса слишком длинный или содержит недопустимые символы, допустимый
символы a-z, A-Z, 0-9 и ‘-,’
Одним из решений является использование PHP оператор контроля ошибок:
@session_start();
Если вы хотите проверить правильность запуска, просто верните bool из этого:
return @session_start();
(Как указано в документация🙂
Эта функция возвращает TRUE, если сессия была успешно запущена, иначе FALSE.
Также кажется, что ваша функция проверки регулярных выражений также неверна, я обновил ее ниже:
!preg_match('/^[a-z0-9\-]{32}$/i', $sess)
Вы можете увидеть результаты Вот.
Других решений пока нет …