如果您的网站允许多个用户注册,那么他们很可能能够更新、删除或查看他们的信息。现在,如何定义当前用户的id,让他们只访问自己的信息/mysql行
例如:如果你采用下面的db结构,而bob是在线的,我如何告诉页面bob是当前用户,他的id="1",并且它对每个在线的用户都这样做。
数据库结构示例:
ID | name | Email
1 | bob | bob@example.com
2 | john | john@example.com
请注意,这些是折旧函数这是我的登录脚本,它只是在一个重定向循环中发送给我。这是用折旧后的函数编写的,我如何更新它以使用PDO?
<?php
session_start();
include_once 'dbconnect.php';
if(isset($_SESSION['user_id'])!="")
{
header("Location:login.php");
}
if(isset($_POST['btn-login']))
{
$email = mysql_real_escape_string($_POST['email']);
$upass = mysql_real_escape_string($_POST['upass']);
$email = trim($email);
$upass = trim($upass);
$res=mysql_query("SELECT user_id, user_name, user_pass FROM users WHERE user_email='$email'");
$row=mysql_fetch_array($res);
$count = mysql_num_rows($res); // if uname/pass correct it returns must be 1 row
if($count == 1 && $row['user_pass']==md5($upass))
{
$_SESSION['user_id'] = $row['user_id'];
header("Location:index.php");
}
else
{
echo '<div class="invalid-message text-center">Email or password is invalid</div>';
}
}
?>
你需要从不同的角度来处理这个问题——而不是简单地说有一个用户有一个id和一个名字,你需要备份几个步骤来思考该用户是如何获得该id以及他/她是如何登录的。
您需要创建一个登录页面,该页面将使用名称/密码,并根据数据库中存储的数据进行检查,如果正确,则允许用户继续使用该页面。如果不正确,你需要允许他们重新输入详细信息(例如,如果他们键入了错误的p/w),或者如果他们没有账户(因此没有id),则需要注册。
请注意,密码不得以纯文本形式存储在数据库中,并且应进行哈希处理(例如使用SHA 256加密)和加盐处理,并且您在登录时会检查p/W的哈希和加盐版本。
成功登录后,您将启动会话,并将与登录用户相关的内容的数据库行分配给新会话,正是从该会话开始,id和名称将从session_start()中使用,就像我在这里看到的那样。
总之,当他们登录时,假设登录是正确的,然后将详细信息分配给会话,并将session_start()包含到您希望包含在会话中的每个页面,然后您可以通过$userID或$userName引用用户。
一旦你获得了会话,你就可以使用这样的东西来识别用户的名称和id,这将在你拥有session_start()的每个页面上都可用:
if(!empty($_SESSION['user']) )
{
$userID=$_SESSION['user']['id'];
$userName=$_SESSION['user']['name'];
}....
当用户想要注销或您想要删除与该用户活动相关的会话详细信息时,您可以使用:
unset($_SESSION['user']);
然后你可以将它们重定向到另一个页面
header("Location: index.php");