PHP中的会话ID和变量

3

我有一个登录页面,一旦用户成功登录,它会回显一个指向他们个人页面的链接。当该页面加载时,我希望它检查用户是否有访问权限,以便某人不会尝试在URL中输入www.mywebsite.com/bob.php。我尝试使用cookie发送用户信息,但我意识到在写入页面后无法使用cookie。有没有人知道一种既高效又相对简单的方法来实现这一点?谢谢


2
为什么不把那些信息存储在会话中呢? - Gumbo
在个人资料页面的顶部,将会话变量与用户资料信息进行比较。例如:<?php if ($_SESSION['logginInUserID'] == $profileUserID){ /* success */ }else{ header('Location: http://mysite.com/'); } ?> - Brad Christie
为什么不让"个人页面"动态生成,而是为每个用户都创建一个独特的文件呢? - drudge
@jnpcl:嗯,你可以两者兼备。使用mod_rewrite非常容易实现具有良好URL的动态生成页面 :) - nico
2个回答

4

用户登录后,将其id分配给一个会话变量:

<?php
session_start();
$_SESSION["userid"] = $userid;
?>

在受保护的页面上,检查用户是否设定了$_SESSION["userid"]变量:
<?php
session_start();
if (isset($_SESSION["userid"])) {
   //show page
}else{
  echo "No rights";
}
?>

这样做不会让登录后的用户可以访问所有个人页面吗? - Trevor Arjeski
1
最好也检查一下 if ($_SESSION ['userid'] == $userid) { /*显示页面*/ } ;) - drudge
哦,是的。我以为这个人指的是像个人资料页面那样,只有已登录的用户才能看到彼此的页面。如果是每个用户的话,那么是的 - 绝对要双重检查用户是否正在检查自己的页面。 - arnehehe

1

确实,当输出已经发送到浏览器时,您无法设置cookie。一个有用的技巧是使用输出缓冲。基本上,您可以在代码开头调用ob_start(),并在结尾处调用ob_end_flush()。现在,您可以在代码中任何位置设置cookie(和任何HTML标头)。


好的。这样代码就不会打印出来,直到您刷新或清除它。 - Trevor Arjeski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接