1

次のコードを使用して、セッションが存在するかどうか、およびセッションが作成されていないかどうかを確認します。

     session_start(); 
     $loginExists='';
     $show=1;



     if(isset($_SESSION['username'])){
            $loginExists = '<div style="color:#006633; font-family: calibri, Times, serif;  font-size:1.3em; font-weight:bold; margin-left:4%; margin-top:2%;">You  are already logged in!</div>';
            $show = 0;  
        }

     elseif (!isset($_SESSION['username'])){
        if (isset($_COOKIE['username'])){   
            $_SESSION['username'] = $_COOKIE['username'];
            $loginExists = '<div style="color:#006633; font-family: calibri, Times, serif;  font-size:1.3em; font-weight:bold; margin-left:4%; margin-top:2%;">You  are already logged in!</div>';
            $show = 0;}

Cookieは次のように設定されます。

setcookie('username',$row['username'],time() + 10*24*3600,"/mysite/","");

私の問題は、IE8 / 9でクーキーをクリアすると、Cookieをクリアできないことです。追加フォームに移動できます。FirefoxやChromeでは問題ありません。

インターネットオプション>削除(閲覧履歴)>チェックされたCoookiesに移動してCookieを削除しようとしています。

非常に困惑したATM。

編集:

フォームの追加(セッションのチェック方法):

if (!isset($_SESSION['username'])){
            if (isset($_COOKIE['username'])){   
                $_SESSION['username'] = $_COOKIE['username'];

            }
        else{   
                $_SESSION['addForm'] = 1;
                header("Location:loginForm.php");   
            }

したがって、ブラウザを介してCookieがクリアされているかどうかを確認できるように、ログインページにリダイレクトする必要があります。

4

2 に答える 2

1

(上記のコメントに基づいて、完全性のための回答を投稿する)

IEのヒント。それを閉じます。コントロールパネルに移動し、インターネット設定を見つけて、そこからCookie(および必要に応じてファイル)をクリアします。次に、IEを再度開きます。開いたままにして更新を押すと、以前のCookieが送信されることに注意してください。閉じると、これが整理されます。

Q:それはIEの癖ですか?

IEはキャッシュされたファイルとCookieを内部的にロードし、ファイルをクリアしてもメモリから削除されないと思います。したがって、この動作が発生した場合は、閉じてメモリから削除してから、ファイルをクリアして再度開きます。

また、Fiddler(デバッガー)の「落とし穴」として、Fiddlerから「無条件に再送信」を押すと、Cookieが後で削除された場合でも、Cookieを含む前のクエリが再送信されます。正直なところ、これは私が期待していることなので、それが欠点だと言っているのではありません。送信されているものを監視する必要があることに注意してください。アプリをデバッグするときに期待するものとは限らない場合があります。

于 2012-11-26T00:50:14.043 に答える
0

セッションを設定した後、PHPからCookieの有効期限を設定しようとしましたか?

于 2012-11-23T06:44:49.577 に答える