会话启动验证


Session start validation

我有这个函数:

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)

你可以在这里看到结果。