0

我使用 PHPSession变量让用户登录并编辑他们的网站。当他们注销时,我调用该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
    }
    ?>
4

2 回答 2

0

无需检查您的代码。

您必须检查用户是否有 cookie(不是会话!)。如果他使用 cookie 进入网站但没有会话,则您在后台将他登录(并设置会话)。

如果您有适当的过期时间,则不应取消设置 cookie。然而,会话 cookie 将在浏览器关闭后消失。

于 2012-08-04T16:38:15.607 回答
-1

这是您可以在其中找到问题答案的链接:

http://www.codeflask.com/2012/08/why-session-destroy-when-remove-my.html

实际答案(引用自链接)是:

删除 cookie 时会话会自动销毁,原因是每当创建会话时,它也会将其 id 存储在 cookie 中,这就是会话自动销毁的原因。

于 2012-08-04T17:09:47.627 回答