0

PHPSession変数を使用して、ユーザーにログインしてWebサイトを編集させます。彼らがログアウトしたら、session_destroy();関数を呼び出してセッションを終了します。

ログイン画面で、「このコンピューターを記憶する」オプションがあり、$_SESSION[]変数を使用する代わりに、次のようにCookieを設定します。

setcookie("admin", true, $expire);

Cookieは設定されていますが、ログアウトするとCookieの設定が解除されます。これを防ぐ方法はありますか?セッションを終了したいのですが、ウェブサイトにもコンピューターを覚えてもらいたいです。

お時間をいただきありがとうございます。

編集:これは、セッションを開始および破棄するために使用する2つのメソッドです(私が呼び出すセッションメソッドは別のクラスにあります)

 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を使用してWebサイトにアクセスしたが、セッションがない場合は、バックグラウンドでログイン(およびセッションの設定)します。

適切な有効期限がある場合は、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 に答える