在我的sql表中使用user_id作为会话ID是不安全的吗?这通常是php开发人员做的吗?
http://sockface.com/hellooooo.png
此外,我已经无数次尝试将会话ID存储为用户ID
include('profile/core/init_inc.php');
$_SESSION['uid'] = $user_id;
header("Location: profile/edit_profile.php");
在我的init_inc
中function fetch_user_info($uid){
$uid = (int)$uid;
$sql = "SELECT
`user_id` AS `id`,
`username`,
`user_firstname` AS `firstname`,
`user_lastname` AS `lastname`,
`user_about` AS `about`,
`user_email` AS `email`
FROM `users`
WHERE `user_id` = {$uid}";
$result = mysql_query($sql);
return mysql_fetch_assoc($result);
如果我有$ _SESSION ['uid'] = 90;登录后会显示test@test.ca info here
所以我的问题是,将会话ID存储为user_id是否安全,以及当我尝试这样做时,为什么不能正常工作呢?
答案 0 :(得分:2)
一些事情:
1。)会话ID不应该是特定用户的常量值。这是违反安全规定的行为。会话ID应该每隔一段时间更改一次。理想情况下,它应该是随机值。
2。)看起来您没有设置会话ID。您正在设置名为“uid”的会话变量。
3。)你有没有打电话给session_start()
?
尽管我真的不建议将会话ID设置为常量值,但您可以使用session_id() function设置会话的ID:
$session_id = "some_random_value";
session_id($session_id);
但就像我说的那样,这不应该是用户的ID。您可以将用户的ID存储为会话信息,并在用户加载页面时检查它们是否已登录。
if (isset($_SESSION["user_id"]))
{
//user is logged in
$user_id = $_SESSION["user_id"];
}
else
{
//make user log in
$user_id = result_of_login();
$_SESSION["user_id"] = $user_id;
}
有关session documentation中的PHP会话的更多信息。