我使用PHP Session
变量让用户登录并编辑他们的网站。当他们注销时,我调用session_destroy();
函数来终止会话。
在登录屏幕上,我可以选择“记住此计算机”,而不是使用$_SESSION[]
变量,我设置了一个像这样的cookie:
setcookie("admin", true, $expire);
已设置Cookie,但是当我退出时,Cookie会取消设置。有什么办法可以防止这个?我希望会话结束,但我希望网站也能记住计算机。
感谢您的时间。
编辑:以下是我用来启动和销毁会话的两种方法(我调用的会话方法在另一个类上)
public function loginCheck() {
//check if the remember me is set
if (isset($_POST['remember'])) {
$expire = time() + 60 * 60 * 24 * 30;
setcookie("admin", true, $expire);
}
else{
setcookie("admin", "", time()-3600);
}
$sth = $this->db->prepare("SELECT uid FROM philllwareusers WHERE
usr = :login AND pasw = :password");
$sth->execute(array(
':login' => $_POST['user'],
':password' => $_POST['pswrd']
));
$data = $sth->fetch();
$count = $sth->rowCount();
if ($count > 0) {
//check if user has permision to edit this website
$sth = $this->db->prepare("SELECT web_id FROM website_spine WHERE
admin_id = :uid ");
$sth->execute(array(
':uid' => $data['uid']
));
$datas = $sth->fetch();
$counts = $sth->rowCount();
if ($counts > 0) {
if ($datas['web_id'] == WEB_ID) {
Session::init();
Session::set('uid', $data['uid']);
Session::set('loggedIn', true);
header('location: ../index');
} else {
header('location: ../Adminlogisn');
}
}
// login
} else {
header('location: ../Adminlogin');
}
}
function logout() {
Session::init();
Session::destroy();
header('location: '.URL.'/Adminlogin');
}
这是管理员登录的样子(将检查是否应该设置cookie的部分,并且应该保持设置或销毁它。),
<?php
if(!isset($_COOKIE['admin']) || $_COOKIE['admin'] == ''){?>
Remember this computer as an admin computer <div style="display: inline;cursor: pointer;" onclick="alert('By selecting this option, your website will remember this computer and present the login option on the menu bar when you are not logged in.')">[?]</div>
<input type="checkbox" name="remember" style="width: 20px;"/>
<?php
}
else{
?>
Un-check to forget this computer as an admin computer. <div style="display: inline;cursor: pointer;" onclick="alert('This computer is currently rememberd as and admin computer, making the login link on the menu bar visible for easy access. Uncheck this box to forget this computer as admin computer.')">[?]</div>
<input type="checkbox" name="remember" checked="checked" style="width: 20px;"/>
<?php
}
?>
答案 0 :(得分:0)
不检查您的代码。
您必须检查用户是否有cookie(而不是会话!)。如果他使用cookie进入网站但没有会话,则在后台登录(并设置会话)。
如果您有适当的到期时间,则不应取消设置Cookie。但是,会话cookie将在浏览器关闭后消失。
答案 1 :(得分:-1)
这里是您可以找到问题答案的链接:
http://www.codeflask.com/2012/08/why-session-destroy-when-remove-my.html
实际答案(引自链接)是:
当删除cookie时会自动销毁会话,原因是无论何时创建会话,它还会将其ID存储在cookie中,这就是会话自动销毁的原因。