PHP,防止用户在未登录的情况下访问页面?

时间:2009-10-20 12:19:07

标签: php authentication

如何防止用户在未登录时访问该页面?我希望他被重定向到登录页面。我知道它与会话有关。

4 个答案:

答案 0 :(得分:11)

它的工作原理如下:

  1. 开始会话:session_start()
  2. 如果Session [“user”] == null,则重定向到登录页面,否则继续。
  3. 在登录页面中,使用表单
  4. 询问用户密码
  5. 将此表单发布到登录页面
  6. 如果用户已获得授权,请检查您的身份验证服务(例如,mysql中的表)
  7. 如果是,则Session [“user”] = $ userName,将用户重定向到该页面。如果不是,请再次提示输入密码
  8. 当然,这一切都非常非常简单。在您的会话中,您可以保留复杂的用户对象或任何内容。祝你好运。

答案 1 :(得分:8)

当他记录时 - 存储一个会话变量。然后在每一页的开头

session_start();
if (!isset($_SESSION['nID']))
    header("Location: login.php");

如果登录正常

session_start();
$_SESSION['nID'] = 1; //example

答案 2 :(得分:8)

正如Svetlozar Angelov所指出的,以下代码可以很好地运作:

if (!isset($_SESSION['nID']))
    header("Location: login.php");

然而.. 这实际上并不能确保页面对抗真正想要访问的用户。你需要做一些调整:

if (!isset($_SESSION['nID']))
{
    header("Location: login.php");
    die();
}

这可以防止那些知道如何忽略浏览器标头进入页面并导致问题的机器人和精明的用户。它还允许页面停止执行页面的其余部分并节省资源。

还值得注意的是,$ _SESSION ['nID']可以替换为用于存储用户名或id的任何其他变量。

答案 3 :(得分:1)

请按照以下步骤操作:

创建一个login.php页面,供用户在表单中输入用户名和密码的所有人都可以访问。此表单必须提交给login.php本身。 (动作= '的login.php')。还在表单中包含一个隐藏变量,用于跟踪表单是否已提交。

如果设置了隐藏变量,请检查数据库中是否存在用户名($_POST['user']),以及密码是否与用户名匹配。如果是,请将用户名存储在$ _SESSION变量中,如下所示:

$_SESSION['username'] = $_POST['user'];

如果没有,请像这样重新加载login.php:

echo 'header("login.php")'; //You should not have echoed anything before this

现在在您创建的每个用户页面中包含login.php。假设您正在编写电子邮件应用程序,请像这样创建一个inbox.php

include ("login.php")

现在,login.php将检查会话变量'user'是否已设置,并且仅允许授权用户访问。