我在页面A中有一个指向页面B的链接。页面B具有如下函数:
function s(){
$_SESSION['active']='0';
}
s();
echo $_SESSION['active'];
问题是,为了调用函数s()并设置$_SESSION['active']
,我需要第二次刷新,这会增加一些开销。我不知道为什么在从A页面指向B时没有调用此功能?任何帮助将不胜感激。
编辑1:我有session_start();在每个PHP脚本的最顶层。我能想到的唯一解决方案是第二次刷新
编辑2:我仔细检查了代码,回显了函数中的每个变量,并使用了XDEBUG。问题就像我说的那样,当我指向页面B时,直到刷新页面才会调用该函数。
编辑3:问题解决了。这是一个非常愚蠢的错误,会话变量在该函数之前的代码中的某处未设置。这个有问题的函数是嵌套函数的一部分,我在函数的数量上使用循环引用,这使我的代码难以阅读,这就是我无法在此发布的原因。非常感谢,这真的是一种耻辱。
答案 0 :(得分:1)
function s(){
$_SESSION['active']='0';
return $_SESSION['active'];
}
$result =s();
echo $result;
尝试此操作,因为函数没有返回
答案 1 :(得分:1)
有几种选择。可以将会话代码移动到页面A,这样当它重定向到B时,可以看到更新的会话值。或者,你可以在第B页尝试这样的事情:
<?php
session_start();
function s(){
$_SESSION['active']='0';
}
s();
session_write_close()
session_start();
echo $_SESSION['active'];
请参阅demo。
您可能希望查看相关讨论here。
但请注意,当我运行此代码时:
<?php
session_start();
function s(){
$_SESSION['active']='0';
}
s();
echo $_SESSION['active'];
在3v4l.org它与PHP 5.2.3-5.6.30和7.0.0-7.2.0beta1运行良好。如果使用的是PHP 4或PHP 5的早期版本,则该函数会执行,但结果会出现警告。