【问题标题】:Simple password protecting of a page: What am I doing wrong here?页面的简单密码保护:我在这里做错了什么?
【发布时间】:2016-02-12 23:58:28
【问题描述】:

对于我的测试环境站点,我希望任何查看它的人每次会话都必须输入一次密码。当他们的会话开始时,他们输入密码并被重定向到他们试图查看的页面。所以我在每一页的顶部都有

// For test site, require login
if ( !$_SESSION['loggedIn'] )
{
    $pagetarget = $_SERVER['REQUEST_URI'];
    include "test_login.php";
    die();
}

然后test.login.php

<?php 
    if ( $_POST['password'] == '091u233j12j3' )
    {  
       $_SESSION['loggedIn'] = true;
       header("Location: " . $pagetarget);
       die();
    }
?>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test Environment Login</title>
</head>
<body>
    <form method="POST">
        <p>Enter password to unlock <b>test.mysite.com</b>: <input type="text" name="password" /><input type="submit" /></p>
        <p>You will be redirected to the page you tried to access.</p>
        <input type="hidden" name="pagetarget" value="<?php echo $pagetarget; ?>" />
    </form>
</body>
</html>

但页面重定向不起作用。我究竟做错了什么?

【问题讨论】:

  • 只是一个想法,但您不能使用 Javascript 和 document.location 来重定向页面吗? ...例如 document.location.href="google.com";
  • 您是否检查过页面重定向的值,因为您不在同一个文件中?
  • 你有session_start()吗?
  • @user3362232 你在 javascript 中所做的任何事情都可以被一个知识一般的用户轻易绕过,而且根本没有任何保护措施。尽管此问题与“真正的”安全性无关,但您仍应始终在服务器上进行检查和验证,并且永远相信浏览器发送给您的内容。

标签: php html session post


【解决方案1】:

您需要在每个脚本的开头调用session_start(),然后才能使用$_SESSION

例子:

session_start();
if ( !$_SESSION['loggedIn'] )
{
    $pagetarget = $_SERVER['REQUEST_URI'];
    include "test_login.php";
    die();
}

【讨论】:

  • 那行得通。但为什么在每个脚本的开头?就像我说的,我希望这是一次性完成。
  • @PeterThiel 它只需要在您检查(或设置)$_SESSION['loggedIn'] 或任何其他$_SESSION 变量的脚本上完成。如果你在每一页上都检查,你必须在每一页上都这样做。
【解决方案2】:

试试这个:

// For test site, require login
session_start(); 
if ( !$_SESSION['loggedIn'] )
{
    $pagetarget = $_SERVER['REQUEST_URI'];
    include "test_login.php";
    die();
}

test_login.php

<?php 
if ( $_POST['password'] == '091u233j12j3' )
{  
   $_SESSION['loggedIn'] = true;
   header("Location: " . $_POST['$pagetarget']);
   die();
}
?>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
(...)

【讨论】:

  • 这仍然会失败,因为他在包含此代码之前正在检查$_SESSION['loggedIn']session_start() 应该在检查之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2013-06-28
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多