对于会话处理,我使用mysql而不是默认的基于php文件的处理。
所以在从db读取会话信息之前,我想验证客户端提供的会话ID是否有效,我写了一个函数,它看起来现在正常工作,但仍然想与大家核实一下
private function validSID($id) {
return !empty($id) && preg_match('/^[a-zA-Z0-9,-]{26,40}$/', $id);
}
谢谢大家
修改 的 我按照你们的建议进行了修改,如下所示
private function validSID($id) {
//make sure the length is 22
//things are based on session.hash_bits_per_character = 6
return preg_match('/^[a-zA-Z0-9,-]{22}$/', $id);
}
答案 0 :(得分:1)
您正在检查有效数字,但完全忽略了PHP的会话ID是基于各种.ini参数的固定长度的事实。您应该定制您的支票,以便拒绝任何与PHP的当前设置不匹配的ID字符串,例如其中包括hash_bits_per_character。