我正在查看 Zend_Session 的代码,试图更好地理解如何实现会话启动。在代码中,他们做了一些我不太理解的事情。
$hashBitsPerChar = ini_get('session.hash_bits_per_character');
if (!$hashBitsPerChar) {
$hashBitsPerChar = 5;
}
switch($hashBitsPerChar) {
case 4: $pattern = '^[0-9a-f]*$'; break;
case 5: $pattern = '^[0-9a-v]*$'; break;
case 6: $pattern = '^[0-9a-zA-Z-,]*$'; break;
}
if(!preg_match('#'.$pattern.'#', $id)){
session_id(md5(session_id()));
$regenerateId = true;
}
我难以理解的是为什么他们的模式没有(^),然后如果它不匹配,他们会在开始会话之前创建一个临时会话 ID。这对我来说没有意义 - 为什么他们要对没有进行预赛0-9a-zA-Z-,
?我只是不太明白这里发生了什么,并想了解。
谢谢