【问题标题】:PHP sessions are not settingPHP会话未设置
【发布时间】:2014-01-19 20:20:28
【问题描述】:

我正在创建一个简单的登录系统,并且每次尝试登录时都会遇到会话设置失败并将错误返回给我的问题。

代码贴在下面。

  • 表格:

    <form action="login_system.php" method="post">
    Username<br>
    <input type="text" name="username"><br>
    Password<br>
    <input type="password" name="password"><br>
    <input type="submit" name="submit" value="login">
    </form>
    
  • login_system.php:

    error_reporting(E_ALL ^ E_NOTICE);
    
    $user = $_POST['username'];
    $pass = $_POST['password'];
    
    if (isset($_POST['submit']) && $user == 'test' && $pass == 'test') {
        session_start();
        $_SESSION['logged_in'] == 'yes';
        if ($_SESSION['logged_in'] == true) {
            echo '<META HTTP-EQUIV="Refresh" Content="0; URL=main_index.php">'; 
        }
    }
    
  • 登录页面:

    session_start();
    require('login_system.php');
    
    
    if ($_SESSION['logged_in'] == 'true') {
        echo 'ok';  
    } else {
        die ('You do not have permission to view this webpage.');   
    }
    

【问题讨论】:

    标签: php html session xampp login-script


    【解决方案1】:

    正在登录页面上调用会话。尝试删除它,它应该可以解决您的问题。

    【讨论】:

      【解决方案2】:

      session_start() 必须位于您使用会话的每个页面的顶部。在您的“Login_system”页面中它不是。它应该是这样的:

      session_start();
      error_reporting(E_ALL ^ E_NOTICE);
      
      $user = $_POST['username'];
      $pass = $_POST['password'];
      
      if (isset($_POST['submit']) && $user == 'test' && $pass == 'test') {
          $_SESSION['logged_in'] = 'yes';
          if ($_SESSION['logged_in'] == true) {
              echo '<META HTTP-EQUIV="Refresh" Content="0; URL=main_index.php">'; 
          }
      }
      

      还有,

      $_SESSION['logged_in'] == 'yes';
      

      应该只有一个等号:

      $_SESSION['logged_in'] = 'yes';
      

      两个等号是比较运算符。你想要一个赋值运算符。

      【讨论】:

      • 是的。它可以超过它。
      • Notice: A session had already been started - ignoring session_start() 我仍然得到错误。
      • 你有没有给session_start()打过两次电话?
      • 我们在这里看到您的所有代码吗?该错误的原因很清楚,但我知道它不在我的代码中两次。
      【解决方案3】:

      您有以下是比较运算符。赋值运算符就是=

      $_SESSION['logged_in'] == 'yes';
                             ^
      if ($_SESSION['logged_in'] == true) {#you can probably remove this line
      

      应该是这样的

      $_SESSION['logged_in'] = 'yes';# or true?
      

      那么你有'true',它实际上是'yes',或者除非你正在寻找== true而不是字符串true

      if($_SESSION['logged_in'] == 'true') {
      

      这应该是以下之一,但要确保你是一致的

      if($_SESSION['logged_in'] == 'yes') {
      

      if($_SESSION['logged_in'] == true) {
      

      【讨论】:

        猜你喜欢
        • 2013-05-13
        • 2013-10-18
        • 2015-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多