【问题标题】:validating user session in php在 php 中验证用户会话
【发布时间】:2026-02-23 02:20:03
【问题描述】:

我正在创建一些页面(包括登录页面),这些页面只能由系统管理员访问。

在验证用户凭据后的 login.php 中。我像这样设置了一个会话变量:

mysql_connect("localhost", $values['uname'], $values['password']) or 
die(mysql_error());
echo "Connected to MySQL<br />";
mysql_select_db("somedb") or die (mysql_error());

session_start();
$_SESSION['level'] = 'admin';
header('Location: /admin/index.php'); 

然后在 index.php 页面中我正在执行以下操作:

<?php 
if($_SESSION['level'] !== 'admin'){
    header("location:../admin/login.php");
}
?>

但它似乎不起作用。每次我被重定向到 login.php(即使通过 login.php 成功登录后)。
这种方法有什么问题吗?我该如何处理?

基本上在 login.php 以外的页面上,我需要一种方法来确保用户已登录...

【问题讨论】:

  • 我认为这个解决方案不干净。因为其他页面是真正加载并执行的,并且身份验证是硬编码的。是否有任何其他解决方案可以真正“拒绝访问”特殊页面?

标签: php


【解决方案1】:

在检查或设置$_SESSION['level']之前你是在做session_start()吗?

【讨论】:

  • 我现在这样做了,但仍然是同样的问题。我会相应地编辑原始帖子。
  • 在第二个脚本中检查 $_SESSION['level'] 之前,您没有调用 session_start()。这就是我所说的“检查或设置”。
【解决方案2】:

您需要在要使用 Sessions 的每个页面中初始化 Sessions。将 session_start() 放在页面顶部(在发送标头之前)。

【讨论】: