【问题标题】:Session Redirects会话重定向
【发布时间】:2011-01-20 23:18:06
【问题描述】:

我试图通过设置密码保护页面来保护它。我正在使用下面的代码,但它不起作用。

home.php

                session_start(); 



         // Process the POST variables
           $username = $_SESSION["user_name"];
              //$password = $_POST["password"];


            // Set up the session variables
            $_SESSION["user_name"] = $username;

              if(!isset($_SESSION['user_name'])) { header('Location: login.php'); die('<a  href="login.php">Login first!</a>'); }

login.php 的相关部分

           <?php

            session_start(); 



             // Process the POST variables
          $username = $_SESSION["user_name"];
           //$password = $_POST["password"];


                // Set up the session variables
              $_SESSION["user_name"] = $username;

【问题讨论】:

  • 有必要定义实际上什么不起作用。
  • 发布的代码无法识别会话,或者更确切地说没有设置它。
  • 试着了解你想做什么,然后再试一次!
  • 您是否检查过会话 cookie 实际上“不存在”。那将是一个真正的“不结转”。否则,这只是您的数据处理错误。如果 cookie 在那里,会话将起作用。如果不是,则不会。

标签: php mysql cookies session-variables isset


【解决方案1】:

试试这个

session_start(); 

if(!isset($_SESSION['user_name'])) 
{ 
   header('Location: login.php'); 
   exit;
}

$username = $_SESSION["user_name"];
$password = $_SESSION["password"]; *//EDITED*

编辑:

在 login.php 上

<?php
    session_start(); 

    if(isset($_SESSION['user_name'])) 
    { 
        header('Location: home.php'); 
        exit;
    }
?>

<input type = 'text' name = 'login' />
<input type = 'password' name = 'password' />
<input type = 'submit' name = 'submit' />

编辑 2:

登录成功后写下这个

$_SESSION["user_name"] = $_POST["user_name"];
$_SESSION["password"] = $_POST["password"];

这将在会话变量中设置帖子 所以它看起来像这样 现在,当您检查 if(isset($_SESSION['user_name'])) 时,它将返回 true 并重定向到主页

【讨论】:

  • 还是不行。让我也发布登录脚本的相关部分。
  • 还是不行,我不知道是什么问题,应该很简单!
  • 您能否详细解释一下,您面临的具体问题是什么?你的要求是什么?
  • 一旦登录成功,它们就会被路由到 home.php,它可以工作。然后,如果他们没有登录,我将使用上面的代码进行重定向。因此,如果他们能够正确登录,则意味着会话必须处于活动状态,但是当我应用代码时,它仍然会路由它们 login.php
【解决方案2】:

只是猜测,因为您还没有真正完整地提出这个问题。但是尝试替换:

$username = $_SESSION["user_name"];

$username = $_POST["user_name"];

【讨论】:

  • 我的意思是我上面发布的代码没有设置会话,或者更确切地说没有从登录页面继承会话......
【解决方案3】:

在您使用的login.phphome.php 中:

// Process the POST variables
$username = $_SESSION["user_name"];
//$password = $_POST["password"];

// Set up the session variables
$_SESSION["user_name"] = $username;

这根本没有意义,只有在满足登录条件(成功登录)时才设置会话变量,而在其他任何地方都没有。在其他地方,您只需检查它是否存在/已设置。

由于您没有发布处理登录的部分,因此很难说是否有任何其他错误。

【讨论】:

    【解决方案4】:

    您似乎正在复制一个空的用户名,然后将一个空的 $username 的值更改为您的会话数组。

    您希望尽可能少地修改会话信息。

    所以在你的更新页面中:

    <?php
    
    session_start();
    
    // is the line below necessary on this page?
    if ( $_POST['user_name'] != "" ) {
        $_SESSION['user_name'] = $_POST['user_name'];
    }
    
    if ( ( trim($_SESSION['user_name']) != "" ) ) {
         echo $_SESSION['user_name'];
    } else {
         header("Location: login.php");
         die();
    }
    

    更新:删除注释行

    【讨论】:

    • 它仍然重定向到 login.php
    • 您可能从未初始化过会话值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2021-02-22
    • 2014-09-09
    • 2016-05-12
    相关资源
    最近更新 更多