web-dev-qa-db-ja.com

Cookieの有効期限を取得する方法

Cookieを作成するときに、Cookieの有効期限を取得する方法は?

56
love

これを実現するのは困難ですが、Cookieの有効期限は別のCookieに設定できます。このCookieは後で有効期限を取得するために読み取ることができます。より良い方法があるかもしれませんが、これは問題を解決する方法の1つです。

47
Thariama

エンコードされたJSONをCookieに入れることは、Cookieから適切にフォーマットされたデータを取得するための私のお気に入りの方法です。それを試してください:

$expiry = time() + 12345;
$data = (object) array( "value1" => "just for fun", "value2" => "i'll save whatever I want here" );
$cookieData = (object) array( "data" => $data, "expiry" => $expiry );
setcookie( "cookiename", json_encode( $cookieData ), $expiry );

次回Cookieを取得するとき:

$cookie = json_decode( $_COOKIE[ "cookiename" ] );

cookie自体にデータとして挿入された有効期限を簡単に抽出できます。

$expiry = $cookie->expiry;

さらに、使用可能なオブジェクトとして出力されるデータ:)

$data = $cookie->data;
$value1 = $cookie->data->value1;

他のオブジェクト内に必要なだけ多くの小さなオブジェクトをネストできるため、Cookieを使用するのに非常にすてきな方法であることがわかりました。

90
Braikar

有効期限を含むCookie値を設定し、Cookie値から有効期限を取得できます。

// set
$expiry = time()+3600;
setcookie("mycookie", "mycookievalue|$expiry", $expiry);

// get
if (isset($_COOKIE["mycookie"])) {
  list($value, $expiry) = explode("|", $_COOKIE["mycookie"]);
}

//この場合、いくつかの双方向暗号化の方がより安全であることを忘れないでください。参照: https://github.com/qeremy/Cryptee

9
K-Gun

PHP dieでCookieを作成する場合、マニュアルのデフォルト値は0です:

0に設定した場合、または省略した場合、Cookieはセッションの終了時に(ブラウザーが閉じたときに)有効期限が切れます

それ以外の場合は、3番目のパラメーターとしてCookieの有効期間を秒単位で設定できます。

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

しかし、すでに存在するCookieの残りのライフタイムを取得するつもりであれば、不可能です(少なくとも直接的な方法では)。

6
Hannes

Phpのheaders_list()によって返された配列でブラウザに送信されたすべてのCookieのリストがあるようです。他のデータの中で "Set-Cookieを返します次の要素:

_Set-Cookie: cooke_name=cookie_value; expires=expiration_time; Max-Age=age; path=path; domain=domain_

この方法では、値がdeletedであるため、削除されたものも取得できます。

_Set-Cookie: cooke_name=deleted; expires=expiration_time; Max-Age=age; path=path; domain=domain_

そこから、特定のCookieの有効期限または年齢を簡単に取得できます。ただし、この配列はおそらく[〜#〜] [-#〜]setcookie()の実際の呼び出しの後にのみ使用できることに注意してください作成されているので、すでに仕事を終えたスクリプトに有効です。これは私にとってうまくいったので、他の方法でこれをテストしていません。

これはかなり古いトピックであり、これがすべてのphpビルドに有効かどうかはわかりませんが、役立つと思いました。

詳細については、以下を参照してください。

https://www.php.net/manual/en/function.headers-list.php
https://www.php.net/manual/en/function.headers-sent.php

0
sasho

Cookieの有効期限を取得するには、この簡単な方法を使用します。

<?php

//#############PART 1#############
//expiration time (a*b*c*d) <- change D corresponding to number of days for cookie expiration
$time = time()+(60*60*24*365);
$timeMemo = (string)$time;

//sets cookie with expiration time defined above
setcookie("testCookie", "" . $timeMemo . "", $time);

//#############PART 2#############
//this function will convert seconds to days.
function secToDays($sec){

    return ($sec / 60 / 60 / 24);

}
//checks if cookie is set and prints out expiration time in days
if(isset($_COOKIE['testCookie'])){

    echo "Cookie is set<br />";
    if(round(secToDays((intval($_COOKIE['testCookie']) - time())),1) < 1){
        echo "Cookie will expire today.";
    }else{
        echo "Cookie will expire in " . round(secToDays((intval($_COOKIE['testCookie']) - time())),1) . " day(s)";
    }

}else{
    echo "not set...";
}

?>

パート1とパート2を異なるファイルに保存を維持する必要があります。そうしないと、毎回同じ有効期限が切れます。

0
Pedro Sousa