【发布时间】: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