我有一个记住我的登录表单复选框,用于在cookie中设置用户电子邮件,然后我想在下次登录时自动填写用户名。另外,当我使用firbug时,它会显示路径login.php
页面所在目录中的cookie。 index.php
与login.php
目录不在同一目录中。
所以我有index.php
页面的登录表单。当用户提交表单时,它会调用login.php
,其中包含以下代码:
if (isset($_POST['email'])) {
if (isset($_POST['remember'])) {
setcookie("email", $_POST['email'], time() + 9999999);
$_COOKIE['email'] = $userEmail;
}
}
然后在index.php
代码上我有这段代码:
$userEmail = $_COOKIE['email'];
然后我使用$userEmail
变量在用户名字段中自动填充,如下所示:
<div class="form-group <?php if(isset($userEmail)) { echo $addClass; }?>" >
<input type="email" name="email" id="email" class="form-control input-lg" placeholder="Email Address" value="<?php if(isset($userEmail)) { echo $userEmail; } ?>">
</div>
我可以看到cookie正在设置,但是当我尝试回显cookie(电子邮件地址)时,它什么也没显示。
我知道我可能不是以尽可能最好的方式做到这一点,但它曾经工作过,现在它停止了工作。关于我做错了什么的建议?
编辑:当我使用Firebug时,我在Cookies选项卡中看到了这一点:
当我var_dump($_COOKIE['email'])
显示NULL
答案 0 :(得分:0)
if (isset($_POST['email'])) {
if (isset($_POST['remember'])) {
setcookie("email", $_POST['email'], time() + 9999999);
$_COOKIE['email'] = $userEmail;
}
}
查看$_COOKIE['email'] = $userEmail;
行$userEmail = $_COOKIE['email'];
,因为此时$userEmail
没有给出一个值,所以你基本上将$_COOKIE['email']
设置为空值。
或者您需要设置$_COOKIE['email'] = $_POST['email'];
答案 1 :(得分:0)
我想:
if(isset($userEmail))
:
应该是:
if(isset($userEmail) && !empty($userEmail) )
答案 2 :(得分:0)
感谢所有答案,但这一变化解决了这个问题。它将cookie的路径设置为login.php
页面所在的目录,因此我必须为所有目录设置cookie的路径。
我改变了这个:
if (isset($_POST['email'])) {
if (isset($_POST['remember'])) {
setcookie("email", $_POST['email'], time() + 9999999);
$_COOKIE['email'] = $userEmail;
}
}
到此:
if (isset($_POST['email'])) {
if (isset($_POST['remember'])) {
$userEmail = $_POST['email'];
setcookie("email", $userEmail, time() + 9999999, "/");
}
}
我将"/"
添加到setcookie