ホームページ  >  記事  >  バックエンド開発  >  PHP は Cookie をどのように操作しますか?

PHP は Cookie をどのように操作しますか?

青灯夜游
青灯夜游転載
2019-11-29 14:21:232449ブラウズ

PHP は Cookie をどのように操作しますか?

Cookie はクライアントのコンピュータに保存されるテキスト ファイルであり、追跡目的で保持されます。 PHP は HTTP Cookie を透過的にサポートします。

リピーター ユーザーの特定には 3 つの手順が必要です

#● サーバー スクリプトは、一連の Cookie をブラウザーに送信します。年齢などなど。

##●ブラウザは、今後の使用に備えてこの情報をコンピュータ上にローカルに保存します。

#●次回ブラウザが Web サーバーにリクエストを送信するときに、これらの Cookie 情報がサーバーに送信されます。サーバーはこの情報を使用してユーザーを識別します。

この章では、Cookie の設定方法、Cookie へのアクセス方法、削除方法について説明します。

Cookie の構造

Cookie は通常、HTTP ヘッダーに設定されます (ただし、JavaScript はブラウザーに直接 Cookie を設定することもできます)。 Cookie を設定する PHP スクリプトは、次のようなヘッダーを送信することがあります (ブラウザー F12、ネットワークで表示)

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=jc2182.com
Connection: close
Content-Type: text/html

ご覧のとおり、Set-Cookie ヘッダーには名前と値のペア、GMT 日付、パスが含まれています。そしてドメイン。名前と値は URL エンコードされます。有効期限フィールドは、指定された日時に Cookie を削除するというブラウザの指示です。ブラウザが Cookie を保存するように設定されている場合、この情報は有効期限まで保持されます。ユーザーがブラウザで Cookie のパスとドメインに一致するページを指定すると、ブラウザは Cookie をサーバーに再送信します。ブラウザのヘッダーは次のようになります。

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

PHP スクリプトは、すべての Cookie の名前と値が含まれる環境変数 $_COOKIE にアクセスできます。

PHP で Cookie を設定する

PHP には、Cookie を設定するための setcookie() 関数が用意されています。この関数は最大 6 つのパラメータを受け取り、 タグの前に呼び出す必要があります。この関数は、Cookie セットごとに個別に呼び出す必要があります。

setcookie(name, value, expire, path, domain, security);

すべてのパラメータの詳細は次のとおりです

#●name - Cookie の名前を設定します。

# 値 - 名前付き変数の値を、実際に保存したい値に設定します。

# Expire - 1970 年 1 月 1 日の 00:00:00 GMT からの将来の時間を (秒単位で) 指定します。この時間が経過すると、Cookie にアクセスできなくなります。このパラメータが設定されていない場合、Web ブラウザを閉じると Cookie は自動的に期限切れになります。

# パス - Cookie が有効なディレクトリを指定します。単一のスラッシュ文字により、Cookie をすべてのディレクトリに対して有効にすることができます。

#ドメイン - これは非常に大規模なドメインのドメイン名を指定するために使用でき、少なくとも 2 つの有効期間を含める必要があります。すべての Cookie は、Cookie が作成されたホストおよびドメインに対してのみ有効です。

# セキュリティ - Cookie を HTTPS を使用した安全なトランスポート経由でのみ送信することを指定するには 1 に設定できます。それ以外の場合は 0 に設定すると、Cookie を通常の HTTP 経由で送信できることになります。

次の例では、名前と年齢という 2 つの Cookie が作成されます。これらの Cookie は 1 時間後に期限切れになります。

<?php
   setcookie("name", "John Watkin", time()+3600, "/","", 0);
   setcookie("age", "36", time()+3600, "/", "",  0);
?>
<html>
   
   <head>
      <title>用PHP设置Cookies</title>
   </head>
   
   <body>
      <?php echo "设置 Cookies"?>
   </body>
   
</html>

ヒント: time() 関数は、現在のタイムスタンプを返します。これは、1970 年 1 月 1 日の 0:00:00 からスクリプトが実行される瞬間までの秒数です。

ブラウザを開いてスクリプトにアクセスし、F12 キーを押して開発者モードを開き、[ネットワーク] タブを選択して、[ヘッダー] を選択すると、次の図が表示されます:

PHP を使用した Cookie へのアクセスPHP は Cookie をどのように操作しますか?

PHP には、Cookie にアクセスするためのさまざまな方法が用意されています。最も簡単な方法は、$_COOKIE 変数を使用することです。次の例では、上記の例で設定されたすべての Cookie にアクセスします。

<html>
   
   <head>
      <title>用PHP访问cookie</title>
   </head>
   
   <body>
      
      <?php
         echo $_COOKIE["name"]. "<br />";
         
         echo $_COOKIE["age"] . "<br />";
  
      ?>
      
   </body>
</html>
isset() 関数を使用して、Cookie が設定されているかどうかを確認できます。設定されている場合は出力します。

<html>
   
   <head>
      <title>用PHP访问cookie</title>
   </head>
   
   <body>
      
      <?php
         if(isset($_COOKIE["name"]))
                echo $_COOKIE["name"]. "<br />";
         if(isset($_COOKIE["age"]))
                echo $_COOKIE["age"] . "<br />";
  
      ?>
      
   </body>
</html>

PHP を使用した Cookie の削除

形式的に言えば、Cookie を削除するには、name パラメータを指定して setcookie() を呼び出すだけです (つまり、削除したいものはその名前を null に設定します] が、これは常に機能するとは限らず、依存すべきではありません。最も安全な方法は、有効期限を設定することです/過去の時刻を現在時刻の 60 秒前に設定します/

<?php
   /* 设置过去时间为当前时间的之前的60秒 */
   setcookie( "name", "", time()- 60, "/","", 0);
   setcookie( "age", "", time()- 60, "/","", 0);
?>
<html>
   
   <head>
      <title>用PHP删除cookie</title>
   </head>
   
   <body>
      <?php echo "删除cookie" ?>
   </body>
   
</html>

推奨される学習:

PHP チュートリアル

以上がPHP は Cookie をどのように操作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。