会话开始验证

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 时,问题开始出现。

警告:

The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,'

一种解决方案是使用 PHP error control operator:

@session_start();

如果你想验证它是否正常启动,只需 return 布尔值:

return @session_start();

(如 documentation 中所述:)

This function returns TRUE if a session was successfully started, otherwise FALSE.

看来您的正则表达式检查函数也不正确,我已在下面更新它:

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

可以看到结果here.