会话开始验证

时间:2015-03-21 15:17:10

标签: php session session-state

我有这个功能:

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和' - ,'

1 个答案:

答案 0 :(得分:1)

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

@session_start();

如果你想验证它是否正确启动,只需从中返回bool:

return @session_start();

(如documentation中所述:)

  

如果会话成功启动,则此函数返回TRUE,否则返回FALSE。

您的函数检查正则表达式似乎也不正确,我已在下面对其进行了更新:

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

您可以看到结果here