【问题标题】:php ignores if for $_SESSION['variable'] [duplicate]php 忽略 if for $_SESSION['variable'] [重复]
【发布时间】:2014-08-16 12:49:02
【问题描述】:

$_SESSION 有一个奇怪的问题。

  if(isset($_SESSION['passed']))
  {
     echo "passed";
     unset $_SESSION['passed']; 
  }
  else
  {
  echo "not passed";
  }

结果我得到“未通过”,但是当我评论“未设置 $_SESSION['passed'];”时 我通过了。我的意图只是删除“通过”,这样您就不能通过输入 url 再次调用该文档。我想这与服务器选项有关,但我不知道它可能是哪一个。有人知道为什么 php 会这样吗?

编辑:我使用 xampp

编辑2:

对不起,当我这样做时它可以工作:

set_pass.php

<?php
session_start();
$_SESSION['passed']="123";
header('location:check.php');
?>

检查.php

<?php
session_start();
if(isset($_SESSION['passed']))
{
echo "passed";
unset($_SESSION['passed']);
}
else 
{
echo "not passed";
}
?>

但不是在我的项目中,所有内容都来自 index.php,“check.php”表明会话已经开始。

编辑 3

好吧,为了更接近问题,我在没有视图/模型的情况下重建了我的 mvc 系统,并且控制器在 index.php 中:

index.php

<?php
include 'load.php';

$view =  (isset($_POST['view'])) ? $_POST['view'] : 'default';
echo "<br><b>".$view."</b><br";

$do = new load();

switch($view)

{
     case 'default':
     echo $do->_load('captcha.php');
     break;

     case 'setpass':
     echo $do->_load('setpass.php');
     break;
}

?>

加载.php

<?php
class load
{

   public function _load($string)
   {
   ob_start();

   include $string;

   $output = ob_get_contents();

   ob_end_clean();

   return $output;
}

}
?>

验证码.php

 <form action="?view=setpass" method="post">
 <img id="captcha" src="securimage/securimage_show.php" alt="CAPTCHA Image">
 <input type="text" name="captcha_code" size="10" maxlength="6">
 <a href="#" onclick="document.getElementById('captcha').src =    'securimage/securimage_show.php?' + Math.random(); return false">[ Different Image ]</a>
 <input type="submit" value="GO">
 </form>

setpass.php

<?php
session_start();

include_once 'securimage/securimage.php';
$securimage = new Securimage();

if ($securimage->check($_POST['captcha_code']) == false) 
{
echo "The security code entered was incorrect.<br /><br />";
echo "Please go <a href='javascript:history.go(-1)'>back</a> and try again.";
exit;
}

else
{
$_SESSION['passed']="123";
header('location:check.php');
}


?>

最后:check.php(同上)

<?php
session_start();
if(isset($_SESSION['passed']))
{
echo "passed";
unset($_SESSION['passed']);
}
else 
{
echo "not passed";
}
?>

现在的问题是,当您点击 captcha.php 中的“Go submit-button”时,没有任何反应。你甚至没有得到一个帖子或一个get(我用foreach($POST)尝试了一切..

我对这种现象没有任何解释,但我是初学者,所以也许你知道它是什么?!

【问题讨论】:

  • 页面顶部有session_start()吗?
  • unset($_SESSION['passed']);
  • PHP 只做你写的事。如果它存在,您要取消设置。如果你停下来想一想,那是你试图完成的代码的味道:“你不能再次调用文档”。

标签: php session if-statement


【解决方案1】:

添加 session_start();在你的 index.php 中也是如此。

【讨论】:

    【解决方案2】:

    我真的很抱歉,在我的 MVC 中,一行包含两次模板,但它 未显示在输出中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 2020-03-05
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多