我有这个函数:
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和'-、'
一个解决方案是使用PHP错误控制运算符:
@session_start();
如果你想验证它是否正确启动,只需返回以下结果:
return @session_start();
(如文件所述:)
如果会话成功启动,此函数将返回TRUE,否则返回FALSE。
您的函数检查regex似乎也不正确,我在下面更新了它:
!preg_match('/^[a-z0-9'-]{32}$/i', $sess)
你可以在这里看到结果。