PHP周饼干在几个小时内消失了

时间:2014-12-29 14:15:33

标签: php cookies

我有以下用于登录表单的html标记:

<form name="login" id="login" method="post" action="login_action.php">
    <div id="inp_usr"><input type="text" name="username" id="username" /></div>
    <div id="inp_pass"><input type="password" name="password" id="password" /></div>
    <div id="rem_me">
        <input type="hidden" name="remember" value="0" />
        <input type="checkbox" name="remember" id="remember" value="1" checked />
        <label for="remember" onclick=""></label>
        <span id="rem_me_t">Remember Me</span>
    </div>
    <div id="inp_sub"><input type="submit" id="log_sub" value="Login" /></div>
</form>

我用于cookie的PHP代码:

$checkbox = '';
if (isset($_POST['remember']))
{
    $checkbox = 'remember_me';
}

$year = time() + 1209600;
if($checkbox == 'remember_me')
{
    setcookie('remember_me', $_POST['username'], $year);
} elseif (!$_POST['remember']) {
    if (isset($_COOKIE['remember_me'])) {
        $past = time() - 100;
        setcookie(remember_me, gone, $past);
    }
}

然而,在测试我的网站时,我发现如果我没有访问网站几个小时,我就会退出。我不是很熟悉饼干,所以我不知道这个问题是什么。任何帮助表示感谢

<小时/> UPD:我改变了设置cookie的方式,但在重新启动浏览器时仍然注销:

$year = 315360000;
$expiration = time() + $year;
if($checkbox == 'remember_me')
{
    setcookie('remember_me', $_POST['username'], $expiration);
}

2 个答案:

答案 0 :(得分:3)

对于初学者来说,你的if条款是多余的,这使得检查工作流程变得更加困难,让我们和你们一样感到高兴。

if (isset($_POST['remember']))
{
    $checkbox = 'remember_me';
}

接着是

if($checkbox == 'remember_me')

以及

elseif (!$_POST['remember'])

使用$ _POST数组中的实际值,以及自定义set $ checkbox标志,它实际上是由$ _POST数组设置的。

另外,看看

<input type="hidden" name="remember" value="0" />
<input type="checkbox" name="remember" id="remember" value="1" checked />

为什么隐藏值与复选框的名称相同?你在用JS做什么吗?我可以在这里设想一些值影子问题。


接下来,一旦代码被清理干净,立即出现一个问题:如果未设置“记住”选项,为什么要删除cookie?

$do_remember = isset($_POST['remember']);
//Use a timespan of 1 week
$remembering_timespan = time() + 7 * 24 * 60 * 60;
if ($do_remember)
{
    setcookie('remember_me', $_POST['username'], $remembering_timespan);
} else {
    //This is where i don't see why you are deleting a cookie
}

如果您仅在登录表单处理器上使用此代码块,则没有理由记录任何人 out 。相反,您应该设置更短或会话cookie。

要创建会话cookie(在浏览器控制的时间/会话后删除自己),只需省略expire参数或将其设置为0。


Netx ou说,几个小时之后,当你再次访问该网站时,cookie就不存在了。你关闭/重新打开浏览器了吗?你有没有首先登录?

我的唯一提示可能是您在每个页面上使用上面的代码块,一旦您从登录页面,就没有设置$ _POST ['remember'],导致你破坏cookie的情况

答案 1 :(得分:2)

您将Cookie时间设置为-100,然后在关闭浏览器时删除Cookie。

setcookie( "CookieName", "CookieValue", time()+60*60*24*30);
那是30天。所以你可以增加时间。

所以在将来设置一个不删除cookie的日期。

http://php.net/manual/en/function.setcookie.php