请查看this Stackoverflow帖子。
我遇到与bob_cobb相同的PHP问题。这是Brad Chrisite的回答:
操作顺序。
放置会话创建和 有效性测试检查 页面顶部所以剩下的了 页面可以做出判断调用 存在$ _SESSION ['用户名']
(你可能正在尝试验证 他们在内容区域内,所以你的 “yay”或“ney”消息出现在 文件的所需部分。 漂亮,是的,但整个上半部分 页面看不到它 [可能]有效会话。)
他基本上说session_start()和检查会话变量的条件应该在顶部,这样页面的其余部分就可以根据它进行操作。
但是,我的会话检查 位于页面顶部。
<?php
session_start();
if ($_SESSION['username'])
//User is already logged in, echo the log out button.
...
else
//User is not logged in, echo the log in form & button.
...
//Login form validation if user is not logged in and submitted form.
//At the end, create session variable ($_SESSION['username'])
//Destroy session if user pressed log out button.
session_destroy();
?>
一切正常,但是,与其他问题的海报一样,我必须刷新页面,才能执行 顶部 脚本(检查脚本)对于$ _SESSION ['用户名'])。
为什么?
答案 0 :(得分:2)
在整个控制流程完成之前,不要回显任何内容。我的意思是你应该努力将逻辑与显示分开(更好的是:使用像Model-View-Controller这样的模式)。在你的情况下,也许你可以做这样的事情:
<?php
/* Place all your control logic at the beginning.
Do not echo anything in this block. */
session_start();
if ($_SESSION['username']) {
$loggedin = true;
} else {
$loggedin = false;
...
//Login form validation if user is not logged in and submitted form.
//If login succeeded, set $loggedin to true.
//At the end, create session variable.
}
//Destroy session if user pressed log out button.
session_destroy();
/* Only display logic below, we do not change any state here */
if($loggedin) {
echo logout button
} else {
echo login form
}
?>
答案 1 :(得分:1)
答案很简单。进行用户注册后,您无需取消设置会话。 试试这个
<?php
session_start();
if ($_SESSION['username'])
//User is already logged in, echo the log out button.
...
else
//User is not logged in, echo the log in form & button.
...
//Login form validation if user is not logged in and submitted form.
//At the end, create session variable.
//Destroy session if user pressed log out button.
//session_destroy();
--- do a redirect or a refresh here ....
?>