我有以下用于登录表单的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);
}
答案 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的日期。