php クッキー (トピック)

PHPz
リリース: 2020-08-10 13:44:45
オリジナル
4383 人が閲覧しました

このトピックでは、PHP Cookie の由来、PHP Cookie の属性、PHP Cookie 機能の使い方、PHP Cookie の実践的な応用例を画像、テキスト、動画でわかりやすく紹介します。 ! php中国語ウェブサイトから学習する学生を歓迎します!

php クッキー (トピック)

#1: Cookie とは何ですか?

Cookie はユーザーを識別するためによく使用されます。

Cookie は、サーバーがユーザーのコンピュータに残す小さなファイルです。

同じコンピュータがブラウザを通じてページをリクエストするたびに、そのコンピュータから Cookie が送信されます。

PHP を使用すると、Cookie 値を作成および取得できます。

# 関連トピックの推奨事項:
php セッション

2: Cookie の誕生 HTTP プロトコルはステートレスであるため、サーバー側のビジネスはステートフルである必要があります。

Cookie の本来の目的は、サーバー側での使用を容易にするためにステータス情報を Web に保存することでした。

たとえば、ユーザーが初めて Web サイトにアクセスするかどうかを判断します。最新の仕様は RFC 6265 であり、ブラウザ サーバーが連携して実装される仕様です。

3: Cookie の原則

php クッキー (トピック)初めて Web サイトにアクセスする場合, ブラウズ サーバーはリクエストを送信します。サーバーがリクエストに応答すると、応答リクエストに Cookie が追加されます。ブラウザが 2 回目にリクエストを送信すると、Cookie が送信され、サーバーはユーザーを識別します。もちろん、サーバーは Cookie の内容を変更することもできます。

4: Cookie の属性
Cookie は、名前 (Name) で構成される 4KB 以下の小さなテキスト データです。 、値 (Value)、および Cookie の有効性、セキュリティ、および使用範囲を制御するために使用されるその他のいくつかのオプションの属性。

php クッキー (トピック)

#Name は Cookie の名前を表します。 ValueドメインPathExpiresSecureHttpOnly は、クライアント スクリプトが document.cookie 属性を介して Cookie にアクセスするのを防ぐために使用され、Cookie が盗まれたり、クロスによって改ざんされたりするのを防ぎます。 -サイト スクリプティング攻撃。

5: PHP Cookie 関数

1.setcookie - Cookie の送信

setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
ログイン後にコピー

setcookie() は、残りの HTTP ヘッダーとともにクライアントに送信される Cookie を定義します。

他の HTTP ヘッダーと同様、スクリプトが出力を生成する前に Cookie を送信する必要があります (プロトコルの制限のため)。

出力 ( と またはスペースを含む) を生成する前に、この関数を呼び出してください。

Cookie を設定すると、次回ページを開いたときに $_COOKIE を使用してそれを読み取ることができます。

Cookie 値は $_REQUEST にも存在します。

#パラメータ

は Cookie の値を表します。

Cookie にアクセスできる Web サイトまたはドメインを指定します。 Cookie メカニズムは厳格なオリジン ポリシーに従っていないため、サブドメインが親ドメインの Cookie を設定または取得することを許可します。

は、Cookie にアクセスできる Web サイト上のディレクトリを定義します。

有効期間とは、図の Expires 属性です。通常、ブラウザの Cookie はデフォルトで保存されます。 Closed サーバーがセッションを終了すると、Cookie は削除されます。

Cookie の送信に HTTPS セキュリティ プロトコルを使用するかどうかを指定します。 HTTPS セキュリティ プロトコルを使用すると、ブラウザと Web サーバー間の送信中に Cookie が盗まれたり改ざんされたりするのを防ぐことができます。この方法は、Web サイトの ID 認証にも使用できます。つまり、HTTPS 接続の確立フェーズ中に、ブラウザは Web サイトの SSL 証明書の有効性をチェックします。

パラメータ説明名前クッキー名。 #valueCookie の値。この値はユーザーのコンピュータに保存されます。機密情報は保存しないでください。 expireCookie の有効期限。 #pathdomainsecurehttponly

返回值

如果在调用本函数以前就产生了输出,setcookie() 会调用失败并返回 FALSE。

如果 setcookie() 成功运行,返回 TRUE。

示例

<?php
$value = &#39;something from somewhere&#39;;

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);  /* 1 小时过期  */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
?>
ログイン後にコピー

2、setrawcookie — 发送未经 URL 编码的 cookie

setrawcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
ログイン後にコピー

setrawcookie() 和 setcookie() 非常相似,唯一不同之处是发送到浏览器的 cookie 值没有自动经过 URL 编码(urlencode)。

六:PHP Cookie 简单示例

1、基本操作

<?php

//添加Cookie
setcookie(&#39;username&#39;, &#39;phpcn&#39;, time() + 3600);

//获取Cookie
$username = $_COOKIE[&#39;username&#39;];

//删除Cookie
setcookie(&#39;username&#39;, &#39;&#39;, time() - 3600);

//修改Cookie
setcookie(&#39;username&#39;, &#39;phpcn-updated&#39;, time() + 3600);

?>
ログイン後にコピー

2、面向过程封装

<?php

/**
 * 获取 Cookie
 * @param  string $name Cookie 名称
 * @return mixed       Cookie 值
 */
function cookie_get($name)
{
	return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null;
}

/**
 * 删除 Cookie
 * @param  string $name Cookie 名称
 */
function cookie_del($name)
{
	setcookie($name, &#39;&#39;, time() - 3600);
}

/**
 * 设置Cookie
 * @param  string  $name   Cookie 名称
 * @param  mixed  $value  Cookie 值
 * @param  integer $expire Cookie 过期时间
 * @param  string  $path   Cookie 有效路径
 * @param  string  $domian Cookie 有效域名/子域名
 */
function cookie_set($name, $value, $expire = 3600, $path = &#39;/&#39;, $domian = &#39;&#39;)
{
	setcookie($name, $value, time() + $expire);
}

/**
 * 检测 Cookie
 * @param  string  $name      Cookie 名称
 * @param  boolean $has_empty 检测为空
 * @return boolean             
 */
function cookie_has($name)
{
	return isset($_COOKIE[$name]);
}

?>
ログイン後にコピー

3、面向对象封装

<?php


class Cookie
{
    const OPTION_EXPIRE = &#39;expire&#39;;
    const OPTION_PATH = &#39;path&#39;;
    const OPTION_DOMAIN = &#39;domain&#39;;
    const OPTION_SECURE = &#39;secure&#39;;
    const OPTION_HTTPONLY = &#39;httponly&#39;;

    /**
     * Cookie 实例
     * @var null
     */
    private static $instance = null;

    /**
     * Cookie 选项
     * @var array
     */
    private $options = [
        self::OPTION_EXPIRE => 3600,
        self::OPTION_PATH => &#39;/&#39;,
        self::OPTION_DOMAIN => &#39;domain&#39;,
        self::OPTION_SECURE => false,
        self::OPTION_HTTPONLY => false
    ];

    /**
     * Cookie constructor.
     * @param $options
     */
    private function __construct($options)
    {
        $this->setOptions($options);
    }

    /**
     *  privated __clone
     */
    private function __clone()
    {

    }

    /**
     * 获取实例
     * @param $options
     * @return Cookie|null
     */
    public static function getInstance($options)
    {
        if (is_null(self::$instance)) {
            self::$instance = new self($options);
        }

        return self::$instance;
    }

    /**
     * 设置选项
     * @param $name
     * @param $value
     */
    public function setOption($name, $value)
    {
        if (isset($this->options[$name])) {
            $this->options[$name] = $value;
        }

        throw new InvalidArgumentException(&#39;Cookie option not exists:{$name}&#39;);
    }

    /**
     * 设置多个选项
     * @param $options
     */
    public function setOptions($options)
    {
        foreach ($options as $name => $value) {
            $this->setOption($name, $value);
        }
    }

    /**
     * 设置 Cookie
     * @param $name
     * @param $value
     * @param array $options
     */
    public function set($name, $value, $options = [])
    {
        $this->setOptions($options);

        if (is_array($value) || is_object($value)) {
            $value = json_encode($value);
        }

        setcookie(
            $name,
            $value,
            $this->options[self::OPTION_EXPIRE],
            $this->options[self::OPTION_PATH],
            $this->options[self::OPTION_DOMAIN],
            $this->options[self::OPTION_SECURE],
            $this->options[self::OPTION_HTTPONLY]
        );
    }

    /**
     * 获取 Cookie
     * @param $name
     * @return array|mixed
     */
    public function get($name)
    {
        $value = $_COOKIE[$name];

        if (is_array($value)) {
            $arr=[];
            foreach ($value as $k => $v) {
                $arr[$k] = substr($v, 0,1) == &#39;{&#39; ? json_decode($value) : $v;
            }
            return $arr;
        } else {
            return substr($value, 0,1) == &#39;{&#39; ? json_decode($value) : $value;
        }
    }

    /**
     * 删除 Cookie
     * @param $name
     * @param array $options
     */
    public function del($name, $options = [])
    {
        $this->setOptions($options);

        $value = $_COOKIE[$name];

        if ($value) {
            if (is_array($value)) {
                foreach ($value as $k => $v) {
                    setcookie(
                        $name . &#39;[&#39; . $k . &#39;]&#39;,
                        &#39;&#39;,
                        time() - 3600,
                        $this->options[self::OPTION_EXPIRE],
                        $this->options[self::OPTION_PATH],
                        $this->options[self::OPTION_DOMAIN],
                        $this->options[self::OPTION_SECURE],
                        $this->options[self::OPTION_HTTPONLY]
                    );
                    unset($v);
                }
            }else{
                setcookie(
                    $name,
                    &#39;&#39;,
                    time() - 3600,
                    $this->options[self::OPTION_EXPIRE],
                    $this->options[self::OPTION_PATH],
                    $this->options[self::OPTION_DOMAIN],
                    $this->options[self::OPTION_SECURE],
                    $this->options[self::OPTION_HTTPONLY]
                );
                unset($value);
            }
        }
    }
}
ログイン後にコピー

4、记住登录账号示例

<?php

function cookie_get_username()
{
    return isset($_COOKIE[&#39;username&#39;]) ? $_COOKIE[&#39;username&#39;] : null;
}

function cookie_get_password()
{
    return isset($_COOKIE[&#39;username&#39;]) ? $_COOKIE[&#39;username&#39;] : null;
}

function cookie_get_remember()
{
    return isset($_COOKIE[&#39;remember&#39;]) ? &#39;checked&#39; : null;
}


if ($_SERVER[&#39;REQUEST_METHOD&#39;] === &#39;POST&#39;) {

    $username = $_POST[&#39;username&#39;];
    $password = $_POST[&#39;password&#39;];

    if (isset($_POST[&#39;remember&#39;]) && $_POST[&#39;remember&#39;] === &#39;1&#39;) {
        setcookie(&#39;username&#39;, $username, time() + 3600);
        setcookie(&#39;password&#39;, $password, time() + 3600);
        setcookie(&#39;remember&#39;, &#39;1&#39;, time() + 3600);
    } else {
        setcookie(&#39;username&#39;, &#39;&#39;, time() - 3600);
        setcookie(&#39;password&#39;, &#39;&#39;, time() - 3600);
        setcookie(&#39;remember&#39;, &#39;&#39;, time() - 3600);
    }

    die(&#39;登录成功!&#39;);
}

?>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<form action="" method="post">
    <table width="300" border="1" align="center" cellpadding="5" cellspacing="5">
        <thead>
        <tr>
            <td colspan="2" align="center"><b>登录</b></td>
        </tr>
        </thead>
        <tr align="center">
            <td>用 户 名</td>
            <td><input type="text" name="username" value="<?=cookie_get_username()?>"></td>
        </tr>
        <tr align="center">
            <td>密码</td>
            <td><input type="password" name="password" value="<?=cookie_get_password()?>"></td>
        </tr>
        <tr align="center">
            <td>记住账号</td>
            <td>
                <input type="checkbox" name="remember" value="1" <?=cookie_get_remember()?>>
            </td>
        </tr>
        <tr align="center">
            <td colspan="2"><input type="submit" name="Submit" value="提交" /></td>
        </tr>
    </table>
</form>
ログイン後にコピー

六:php cookie 精选技术文章

1 .PHP7中创建COOKIE和销毁COOKIE的方法

2. 如何设置cookie和删除cookie

3. PHP 中 Session 和 Cookie 区别?

4. PHP 怎么带着 Cookie 跳转?

5. 注意!Laravel删除Cookie的小坑

6. PHP会话控制:cookie和session区别与用法深入理解

7. PHP之你不得不知道的COOKIE含义及使用方式

8. 怎样关闭阻止第三方cookie

9. JS读取PHP中设置的中文cookie时出现乱码怎么办

10. ThinkPHP6.0:Session和Cookie机制的变化

七:php cookie 相关视频教程

1. PHP中cookie怎么记录及删除变量?(图文+视频)

2. PHP cookie实现记录用户登陆信息的方法(图文+视频)

3. PHP cookie实现判断用户是否登录的方法(图文+视频)

4. PHP基于Cookie的购物车模块设计

5. 预定义变量(二):$_COOKIE浏览器上的小甜点

これは Unix タイムスタンプで、Unix エポックからの秒数です。

言い換えると、基本的には time() 関数の結果に有効期限を設定する秒数を加えたものを使用できます。

Cookie 有効なサーバーのパス。 「/」に設定すると、Cookie はドメイン名ドメイン全体に対して有効になります。

「/foo/」に設定すると、Cookie はドメイン内の /foo/ ディレクトリとそのサブディレクトリに対してのみ有効になります。

デフォルト値は、Cookie が設定されているときの現在のディレクトリです。

Cookie の有効なドメイン/サブドメイン名。 これをサブドメイン名として設定すると、Cookie がこのサブドメイン名とその第 3 レベルのドメイン名に対して有効になります。

Cookie をドメイン名全体に対して有効にするには、Cookie をドメイン名に設定するだけです。

この Cookie が安全な HTTPS 接続を通じてのみクライアントに渡されるかどうかを設定します。 TRUE に設定すると、安全な接続が存在する場合にのみ Cookie が設定されます。

この要件がサーバー側で処理される場合、プログラマは安全な接続を介してそのような Cookie を送信するだけで済みます。

TRUE に設定すると、Cookie には HTTP プロトコル経由でのみアクセスできます。 これは、JavaScript などのスクリプト言語を介して Cookie にアクセスできないことを意味します。

XSS 攻撃中の個人情報の盗難を効果的に減らすには、この設定を使用することをお勧めしますが、この記述はしばしば物議を醸します。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート