function generate_session_id(&$db)
{
$user_sess_id = md5(uniqid(mt_rand(), true);
try
{
$stmt = $db->prepare("SELECT COUNT(*) AS session_exists FROM sessions WHERE session_id = :session_id");
$stmt->bindParam(':session_id', $user_sess_id);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if($result['session_exists'] == 1)
{
// Recursion !
generate_session_id($db);
}
else
{
return $user_sess_id;
}
}
catch(PDOException $e)
{
die("generate_session_id(): " . $e->getMessage());
}
}
此功能是否安全使用或有任何缺陷?其唯一目的是爲每個會話生成唯一的ID。這個遞歸函數可以瘋狂嗎?
此外,如果是MySQL,他可以使用自動增量字段。 – 2009-11-11 03:38:20
取決於他究竟是什麼,但是,我同意。關於'md5'的好點也是如此。 – deceze 2009-11-11 03:40:47