我有一个登录表单,允许持久登录和常规会话。简而言之,当用户在他们的帐户中时,他们可以更改密码,电子邮件和内容。但为此,我需要首先从他们的会话或cookie中获取他们的用户名(所以我可以进行正确的SQL查询)。
我尝试使用此代码执行此操作:
if(isset($_SESSION['username']))
{
$username = $_SESSION['username'];
}
else
if(isset($_COOKIE['username']))
{
$username = $_COOKIE['username'];
}
但是如果我尝试回显$ username,我会继续得到“未定义的变量”。 为什么?
我注意到如果我放了一个session_start();在顶部。我得到了适当的会话用户名,但当然不是cookie。 我该如何解决?
奇怪的部分(对我而言)是我在另一个页面中得到完全相同的代码(那部分),并且用户名未定义。
PS:如果不清楚或需要更多信息,请告诉我。
修改
我试过了:
function accountValidation()
{
if(isset($_SESSION['username']))
{
$username = $_SESSION['username'];
}
else if(isset($_COOKIE['username']))
{
$cookie = $_COOKIE['username'];
$explode = explode(' - ', $cookie);
$username = $explode['0'];
}
echo $username;
}
accountValidation();
它有效......所以如果我把它放入一个函数然后调用它,它有效吗?!有什么不同?为什么它需要成为一个功能才能工作?
答案 0 :(得分:0)
如果您设置了某个Cookie,则可以在下次重新加载时使用它。在调用页眉时设置$ _COOKIE。您无法从设置cookie的同一页面检索cookie。我希望你有我的意思。如果不让我知道我会举一个更好的例子。
示例
<?php
session_start();
$_SESSION['test'] = 'test1success';
echo $_SESSION['test'];// would display test1success
if (!isset($_COOKIE['test2']))
{
setcookie("test2", "test2success", time()+3600);
}
echo $_COOKIE['test2'];
// wont display test2success when you load the page for first time
// reload it & it would display test2success
?>
<强>解释强>
您需要了解的第一件事是,在加载页面时,cookie会存储在您的PC(浏览器)上。客户端(即浏览器)将cookie头发送到服务器&amp;页面执行。在页面执行期间由set_cookie设置的值在客户端pc上设置,并且服务器不知道刚设置的新值 - 除非您重新加载页面&amp; cookie标头被发回。