我有一个验证码命令,用于设置会话的值,如果验证码不正确,则刷新页面。
在页面的验证部分:
$_SESSION['refresh']=1;
echo '<META HTTP-EQUIV="Refresh" Content="0"; URL="contact-test.php">';
当页面加载时,它运行一些PHP脚本,看看是否有一个会话变量的值设置,如果有的话,然后回应一个警告框的javascript函数,该函数通过一个警告框进入onLoad命令。
在代码的最开头:
session_start();
if (isset($_SESSION['refresh'])) {
echo '<script type="text/javascript">
function loadalert ()
{alert("Incorrect security code, please try again.")}
</script>';}
我可以判断当页面刷新时会话值丢失,我怀疑session_start()命令正在清除以前的所有会话。我已经尝试过一个测试回送在循环之前和循环之前发送一些文本和会话的值;只有循环之前的一个回放,而刷新时没有会话值。
答案 0 :(得分:4)
当您调用session_destroy()函数或设置到期日期时,不会销毁会话。
您还可以清空SESSION数组以“销毁”SESSION中的任何内容。
答案 1 :(得分:2)
当Josua说会话被销毁时,只调用session_destroy()。检查您是否在上一页中发布的表单中存储会话中的值。如果是这样,当您刷新页面时,上一页中的表单值将被销毁(?)
答案 2 :(得分:1)
如果由于某种未知原因......代码的顺序是......
$_SESSION['refresh']=1;
echo '<META HTTP-EQUIV="Refresh" Content="0"; URL="contact-test.php">';
session_start();
if (isset($_SESSION['refresh'])) {
echo '<script type="text/javascript">
function loadalert ()
{alert("Incorrect security code, please try again.")}
</script>';}
然后它不会工作。如果session_start()位于页面的顶部,那么您的代码应该可以正常工作。
也.....如果你有一些输出已经开始..
$ _ SESSION [ '刷新'] = 1; echo'';
你应该得到一个错误但刷新速度太快,你不会注意到我猜。使用标题(“location:contact-test.php”);而不是过时的元刷新。
答案 3 :(得分:0)
这里可能至关重要的是COOKIES有一个技巧。我知道你在询问会话变量,但这可能会对你造成影响,这让我头疼不止一两次。
如果您在页面上设置了cookie,那么当您阅读cookie时,您不能依赖它。也就是说,在一个页面绘制中,cookie var不能被写入和读取,就像它是一个变量一样。这是一个遥远的事情,所以你永远不要认为你可以写它并且只是立即阅读它 - 你刚写的东西将不会存在,因为你的代码看到的cookie在那时是“陈旧的”。我希望这是有道理的。
会话变量很棒,因为它们的工作方式完全符合您的预期。