22

この Cookie の設定を解除する方法を理解する必要があります。これまで試したことはすべて失敗しました。

これは私が現在設定を解除している方法であり、機能していないようです。

setcookie("user_id", $user_id, time() - 7200);

これが私が設定した方法です:

setcookie("user_id", $user_id, time() + 7200);

set_session_from_cookie()Cookieが設定されているかどうかを確認するこの関数を呼び出し、設定されている場合は、Cookieを使用して新しいセッションを開始します。

問題は、自分のページでこれを使用すると、ログアウトできないことです。これは、セッションの設定を解除できないためだと思います。

私がこの機能を持っている理由は、ユーザーがセッションを終了した後に覚えておきたい場合、Cookie を呼び出すことでセッションを再開できるからです。

function set_session_from_cookie()
{
    if (isset($_SESSION['user_id'])) {
        echo '';
    } else {
        $_SESSION['user_id']=$_COOKIE['user_id'];
    }
}

ログアウト:

<?php
require'core.php';
session_destroy();

setcookie("user_id", "", time() - 7200);
header('Location:/social_learning/site_pages/starter-template.php');

次のコードで Cookie を設定します。

if ($rememberme == "on") {
    $user_id = mysql_result($query_run, 0, 'id');
    setcookie("user_id", $user_id, time() + 7200);
    $_SESSION['user_id'] = $user_id;
    redirect('home_page.php');
} else {
    if ($rememberme == "") {
        echo 'ok';
        $user_id = mysql_result($query_run, 0, 'id');
        echo $user_id;
        $_SESSION['user_id'] = $user_id;
        redirect('home_page.php');
    }
}

作成した関数を使用せずに、保存した Cookie を使用してセッションを再開するにはどうすればよいですか? この機能により、ユーザーがログアウトできなくなっているようです。

4

6 に答える 6

35

Cookie の有効期限を過去の時刻に設定します (たとえば、epochの 1 秒後など)。

setcookie("yourCookie", "yourValue", 1);

これにより、Cookie の有効期限が切れます。

1セッションの終了時に Cookie の有効期限が切れるように設定する0ため、の代わりに が使用されます。0

于 2012-05-10T03:06:35.920 に答える
14

この問題の解決策は、最初に設定した別のファイルから Cookie を設定解除していたため、Cookie を設定解除するための正しいパスを設定する必要があったことです。

ブラウザーの Cookie 内の Cookie を検索して、設定解除に使用する必要があるパスを見つけました。ブラウザー内で Cookie を見つけると、そのパスは Cookie の近くにリストされていました。したがって、次のようにCookieへのパスを設定します。

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages");

最後のパラメータはパスです。そしてそれはうまくいきました。

私のオリジナルsetcookieは次のようになります。

setcookie("user_id", $user_id, time() + 7200, "");
于 2012-05-10T05:05:51.977 に答える
6

コードに関するセキュリティ上の懸念はほとんどありませんが、質問に答えるには、php で Cookie の設定を解除する必要があります。有効期限を過去の時間に設定するだけです。

setcookie("user_id", "", time()-10, "/");

「loginform.php」は有効なドメインではありません。これが問題になる可能性があります。

于 2012-05-10T03:09:57.040 に答える
4

このコードを使用してください

  setcookie("CookieName", "", time()-(60*60*24), "/");

すべてのウェブサイトで常に機能します

于 2013-01-11T14:09:49.853 に答える
4

setcookie の詳細については、php のマニュアルを参照してください。

http://php.net/manual/en/function.setcookie.php

これらのメモは、プロセスを説明する必要があります。

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

Cookie は、設定されたときと同じパラメータで削除する必要があります。value 引数が空の文字列または FALSE で、他のすべての引数が setcookie への以前の呼び出しと一致する場合、指定された名前の Cookie がリモート クライアントから削除されます。これは、値を「deleted」に設定し、有効期限を 1 年前に設定することによって、内部的に実現されます。

FALSE の値で Cookie を設定すると Cookie の削除が試行されるため、ブール値は使用しないでください。代わりに、FALSE には 0 を、TRUE には 1 を使用してください。

于 2012-05-10T03:09:21.373 に答える
1

PHP マニュアルでは、有効期限を過去に設定することで Cookie を削除できます。

setcookie("key","",time()-3600);

場合によっては、引数にパスとドメインを指定する必要があります。

実際、空の文字列で Cookie を割り当てると、設定も解除されます。

setcookie("key","");
于 2012-05-10T03:14:40.533 に答える