会话开始验证
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.
我有这个功能:
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.