最好注意的是,PHP不允许任意会话ID。PHP源代码中的会话ID验证在ext/session/session.c文件中定义,在php_session_valid_key函数中。
https://github.com/php/php-src/blob/master/ext/session/session.c
简而言之,有效的会话ID可以包含数字、字母A到Z(大写和小写)、逗号和短划线。用字符类描述,它将是[-,a-zA-Z0-9]。有效的会话ID的长度可以为1到128个字符。要验证会话ID,最简单的方法是使用类似这样的函数:
<?php
function session_valid_id($session_id)
{
return preg_match('/^[-,a-zA-Z0-9]{1,128}$/', $session_id) > 0;
}
?>
session_id()本身会欣然接受无效的会话ID,但是如果您尝试使用无效的ID启动会话,您将收到以下错误:
警告:session_start(): 会话 ID 太长或包含非法字符,有效字符为 a-z、A-Z、0-9 和 '-,'