很奇怪。我的PHP代码正在执行if和else部分。以下代码启动时尚未设置$ _SESSION ['abc']。
//echo $_SESSION['abc'];
if(!isset($_SESSION['abc'])){
echo "not showing this echo";
$_SESSION['abc'] = "new";
} else {
echo " why it jumps here, in XAMPP?";
}
我的实际代码更复杂,所以我做得更简单。上面的代码没有回应“没有显示这个回声”;即使没有设置$ _SESSION ['abc']。如果我发表声明$_SESSION['abc'] = "new";
,它会回应“没有显示这种回声”。
我现在发现了什么:
仅在XAMPP中发生,在生产服务器上同样正常。
当我在if块中使else条件成立时,会发生这种情况。而且这个条件是设置一个会话变量。
echo $_SESSION['abc'];
,它将显示未定义的索引错误。$_SESSION['abc'] = "new";
时,它会跳到“else”,忽略它之前的回声线。奇怪!!我错过了什么,或者是XAMPP错误。是的,代码在生产服务器上按预期工作。
编辑:
我想补充一点,只是为了这个行为我还重新安装了XAMPP(最新版本)。
至于“我怎么知道它是否设置会话变量,而不是在它之前回显它”,它在else-block中输出echo $_SESSION['abc'];
,但如果我取消注释第一行{{1},它会显示未定义的索引错误}
在else-block中添加echo线的代码。
echo $_SESSION['abc'];
更新2018-06-03 我在Laravel做了上面的代码。我在一个普通的PHP文件中尝试使用Laravel框架中的上述代码,它在XAMPP中工作,应该如此。所以新信息是,这不适用于Laravel-XAMPP组合。版本:Laravel 5.4和XAMPP 7.2.5
现在??
答案 0 :(得分:0)
我不确定你想要达到的目标。在为会话密钥分配值之前,您似乎正在测试$ _SESSION。
执行print_r($ _SESSION)以清除分配了哪个值。重新加载会话后会存储哪个值。您还可以打印输出语句,以查看$('#get_web_data').on('tap',function(){
$.ajax({
url:'http://localhost/test.php',
type:'GET',
data:{'user_name':'amir','password':'123'},
dataType:'json',
timeout: 5000,
crossDomain: true,
error: function (jqXHR, textStatus, errorThrown) {
alert('new textStatus=' + textStatus + ' errorThrown=' + errorThrown);
},
success: function (response) {alert(response);
}
}) ;
});
之类的结果作为示例。
echo (!isset(value))
如果设置并在else块中分配新值
,也尝试将第一个语句更改为truesession_start ();
print_r ($_SESSION);
if (!isset ($_SESSION ['whatever'])){
echo "not set";
print_r ($_SESSION);
}
else {
echo "set";
print_r ($_SESSION);
}
希望有助于找到错误的地方
修改强>
务必使用
session_start ();
print_r ($_SESSION);
if (isset ($_SESSION ['whatever'])){
echo "set";
print_r ($_SESSION);
}
else {
echo "not set";
print_r ($_SESSION);
$_SESSION['whatever'] = "new value";
}
在第一行
或设定
session_start()
在你的php.ini