2015-03-21 1 views
0

У меня есть эта функция:начала сеанса проверки

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.

Предупреждение:

идентификатор сеанса, слишком длинный или содержит недопустимые символы, допустимые символы AZ, AZ, 0-9 и '-'

+0

Какое предупреждение? – jeroen

+0

Я добавил предупреждение на вопрос –

ответ

1

Одно из решений заключается в использовании РНР error control operator:

@session_start(); 

Если вы хотите, чтобы подтвердить, что он начал правильно, просто возвращают логическое значение от:

return @session_start(); 

(Как указано в documentation :)

Эта функция возвращает TRUE, если сеанс был успешно запущен, иначе FALSE.

также, что ваша функция проверки регулярных выражений также неправильно, я обновил его ниже:

!preg_match('/^[a-z0-9\-]{32}$/i', $sess) 

Вы можете увидеть результаты here.

+0

Я не хочу подавлять предупреждение. Я хочу предотвратить это. Меня беспокоит то, что я вызываю session_start с недопустимым идентификатором сеанса. Либо слишком долго, либо есть какая-то другая проблема. –

+0

Какая ошибка вы получаете? –

+1

Кроме того, попробуйте изменить свой preg_match, (похоже, он не соответствует правильно: http://www.tehplayground.com/#6ZYnn9VKL '! Preg_match ('/^[a-z0-9 \ -] {32 } $/i ', $ sess) ', хотя вы можете проверить [this] (http://stackoverflow.com/questions/12240922/what-is-the-length-of-a-php-session-id -string), поскольку это может быть не ровно 32 символа. (Вы должны позволить session_start() выполнить проверку IMO). Сообщите мне точное предупреждение, и я могу помочь дальше. –