web-dev-qa-db-ja.com

PHPでクッキーを設定解除するには?

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

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

_setcookie("user_id", $user_id, time() - 7200);
_

これは私がそれを設定する方法です:

_setcookie("user_id", $user_id, time() + 7200);
_

Cookieが設定されているかどうかを確認するset_session_from_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を使用してセッションを再開するにはどうすればよいですか?この機能により、ユーザーはログアウトできなくなっているようです。

18
arboles

この問題の解決策は、最初に設定した別のファイルから設定を解除していたため、正しいパスを設定して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, "");
11
arboles

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

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

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

_1_は、セッションの終了時にCookieを期限切れに設定するため、_0_の代わりに_0_が使用されます。

28
FThompson

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

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

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

6
mohamed elbou

このコードを使用

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

すべてのウェブサイトで私のために毎回動作します

4
Vaibhav Gautam

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はリモートクライアントから削除されます。これは、値を「削除済み」に設定し、有効期限を過去1年に設定することにより内部的に達成されます。

Cookieの値をFALSEに設定すると、Cookieを削除しようとするため、ブール値を使用しないでください。代わりに、0をFALSEに、1をTRUEに使用します。

3
Magento Guy

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

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

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

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

setcookie("key","");
1
Yinian Chin