我有这个功能:
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
仍然会发出警告。我怎么能验证会话ID,所以我永远不会收到警告?当我将PHP版本从5.3更改为5.6时,问题开始蔓延。
警告:
会话ID太长或包含非法字符,有效 字符是a-z,A-Z,0-9和' - ,'
答案 0 :(得分:1)
一种解决方案是使用PHP error control operator:
@session_start();
如果你想验证它是否正确启动,只需从中返回bool:
return @session_start();
(如documentation中所述:)
如果会话成功启动,则此函数返回TRUE,否则返回FALSE。
您的函数检查正则表达式似乎也不正确,我已在下面对其进行了更新:
!preg_match('/^[a-z0-9\-]{32}$/i', $sess)
您可以看到结果here。