如果您的网站启用了多个用户的注册,那么他们就有可能更新,删除或查看他们的信息。现在,如何定义当前用户的id,以便他们只访问他们的信息/ mysql行?
例如:如果你采用下面的db结构并且bob在线,我如何告诉页面bob是当前用户并且他的id =“1”并且它为每个在线用户执行此操作。
db结构示例:
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>';
}
}
?>
答案 0 :(得分:1)
你需要从不同的角度来处理这个问题 - 简单地说,有一个用户有一个id和一个名字,你需要支持几个步骤来思考该用户如何获得该ID以及如何做他/她登录。
您需要创建一个登录页面,该页面将使用名称/密码并根据数据库中存储的数据进行检查,如果正确,则允许用户继续使用页面。如果不正确 - 您需要允许他们重新输入详细信息(例如,如果他们错误输入了p / w)或者如果他们没有帐户(因此没有ID)就注册。
请注意,密码不得以纯文本格式存储在数据库中,并且应进行哈希处理(例如使用SHA 256加密)并加密,并且这是您在登录时检查的笔记本的哈希和盐渍版本。
成功登录后,您启动会话并将与用户签名相关的内容的数据库行分配给新会话,然后从该会话中将从session_start中使用id和名称( )因为我在这里。
总而言之 - 当他们登录时,假设登录正确,然后您将详细信息分配给会话并将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");