为什么if(空($ _ SESSION [' gebruikersnaam'] [' wachtwoord']))无效?

时间:2017-01-15 20:40:03

标签: php session

首先,我所有的英语都不是很好。对不起,我尽我所能。我正在开发一个CMS系统。我需要一个inlog系统。如果您尚未登录,则无法查看某些页面。我创建了一个php会话,但它不能在其他页面上工作......我将在我编写的代码中包含一些内容。

  1. 在页面上,我检查用户名和密码,我创建了这样的会话。并使用会话检查用户名和密码,因此它适用于该页面。
  2. <?php
    session_start();
    $_SESSSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
    $_SESSSION['wachtwoord'] = $_POST['wachtwoord'];
    
    if(($_SESSSION['gebruikersnaam'] == 'admin')
        && ($_SESSSION['wachtwoord'] == 'admin123')) {
        include("adminpanel.php");
    } else {
        echo "Uw gebruikersnaam of wachtwoord is foutief.";
    }
    ?>
    
    1. 在我的其他页面上,我添加了这个以检查用户是否已登录。我似乎永远不会知道我已登录并且我无法回复会话。这是代码!
    2. if(!empty($_SESSION['gebruikersnaam']['wachtwoord'])) { 
          echo "not ingelogd";
      }
      

      如果会话的条件语句有效,我可以将用户重定向到登录页面,如果他没有登录。

      提前致谢,你会帮助我很多!

2 个答案:

答案 0 :(得分:0)

这是因为舌头松动,$_SESSION而不是$_SESSSION而且:

$_SESSION['gebruikersnaam']['wachtwoord'];

实际上是指1个值,而不是2个:

$data = array('gebruikersnaam' => array('wachtwoord' => 'mijnwachtwoord'));
echo $data['gebruikersnaam']['wachtwoord'];

取而代之的是:

if(!empty($_SESSION['gebruikersnaam']) || !empty($_SESSION['wachtwoord'])){ 
  echo "not ingelogd";
}

但是,您应该只在会话中存储用户名和ID。存储密码是一种潜在的安全漏洞,并非必要。

你也可以使用这样的东西来扫描所需的值:

function required_session_fields(array $keys){
  foreach($keys as $k){
    if(!array_key_exists($k, $_SESSION) && empty($_SESSION[$k])){
      return false;
    }
  }
  return true;
}

if(required_session_fields(['gebruikersnaam', 'wachtwoord'])){
  echo 'gelukt';
}

如果您启动了会话并包含了一个文件,您仍然可以访问$_SESSION变量。在每个 new 服务器请求中,确保会话已启动。

答案 1 :(得分:0)

  1. 在其他页面上你必须

    在session_start();

  2. 之前

    if(!empty($_SESSION['gebruikersnaam']['wachtwoord'])) { 
      echo "not ingelogd";
    }
    

    但是,永远不会创建此变量$ _SESSION [&#39; gebruikersnaam&#39;] [&#39; wachtwoord&#39;]。目前您已经创建了$ _SESSION [&#39; gebruikersnaam&#39;]和$ _SESSION [&#39; wachtwoord&#39;]

    也许你的意思是

    if(!empty($_SESSION['gebruikersnaam']) && !empty($_SESSION['wachtwoord'])) { 
          echo "not ingelogd";
        }