Maison >titres >cookie php (sujet)

cookie php (sujet)

PHPz
PHPzoriginal
2020-08-05 18:02:114436parcourir

Ce sujet présente de manière exhaustive l'origine du cookie php, quels sont les attributs du cookie php, l'utilisation de la fonction de cookie php et les exemples d'application pratiques du cookie php à travers des images, des textes et des vidéos. ! Bienvenue aux étudiants du site Web php chinois pour apprendre !

cookie php (sujet)

1 : Que sont les cookies ?

Les cookies sont souvent utilisés pour identifier les utilisateurs.

Un cookie est un petit fichier qu'un serveur dépose sur l'ordinateur d'un utilisateur.

Chaque fois que le même ordinateur demande une page via un navigateur, le cookie sera envoyé à cet ordinateur.

Avec PHP, vous pouvez créer et récupérer des valeurs de cookies.

Recommandations de sujets connexes : session php

2 : La naissance de Cookie

Le protocole HTTP étant sans état, l'activité côté serveur doit être avec état.

L'objectif initial des cookies était de stocker des informations d'état sur le Web pour faciliter l'utilisation côté serveur.

Par exemple, déterminez si l'utilisateur visite le site Web pour la première fois. La dernière spécification est la RFC 6265, qui est une spécification implémentée par des serveurs de navigateur travaillant ensemble.

3 : Principe des Cookies

cookie php (sujet)

Lors de votre première visite sur le site , parcourir Le serveur envoie une demande. Une fois que le serveur a répondu à la demande, il placera le cookie dans la demande de réponse. Lorsque le navigateur enverra la demande pour la deuxième fois, il apportera le cookie et le serveur identifiera l'utilisateur. Bien entendu, le serveur peut également modifier le contenu des cookies.

4 : Attributs du cookie

Le cookie est un petit morceau de données textuelles n'excédant pas 4 Ko, composé d'un nom (Nom) , une valeur (Value) et plusieurs autres attributs facultatifs utilisés pour contrôler la période de validité des cookies, la sécurité et la portée d'utilisation.

cookie php (sujet)

Name représente le nom du cookie.
Name 表示 Cookie 的名称。
Value

表示 Cookie 的值。

Domain

指定了可以访问该 Cookie 的 Web 站点或域。

Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。

Path

定义了Web站点上可以访问该Cookie的目录。

Expires

什么是有效期,就是图中的Expires属性,一般浏览器的cookie都是默认储存的,当关闭浏览器结束这个会话的时候,这个cookie也就会被删除。

Secure

指定是否使用HTTPS安全协议发送Cookie。

使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。该方法也可用于Web站点的身份鉴别,即在HTTPS的连接建立阶段,浏览器会检查Web网站的SSL证书的有效性。

HttpOnly 用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。
Indique la valeur du cookie.
Spécifie le site Web ou le domaine qui peut accéder au cookie. Le mécanisme des cookies ne suit pas la politique stricte de même origine, permettant à un sous-domaine de définir ou d'obtenir le cookie de son domaine parent.
Définit le répertoire du site Web où le cookie est accessible.
Quelle est la période de validité ? C'est l'attribut Expires dans le fichier ? photo. Navigation générale Les cookies du navigateur sont stockés par défaut. A la fermeture du navigateur et de la fin de la session, le cookie sera supprimé.
Spécifiez s'il faut utiliser le protocole de sécurité HTTPS pour envoyer des cookies. L'utilisation du protocole de sécurité HTTPS peut protéger les cookies contre le vol et la falsification lors de la transmission entre le navigateur et le serveur Web. Cette méthode peut également être utilisée pour l'authentification de l'identité des sites Web, c'est-à-dire que lors de la phase d'établissement de la connexion HTTPS, le navigateur vérifiera la validité du certificat SSL du site Web.
Utilisé pour empêcher les scripts clients d'accéder aux cookies via l'attribut document.cookie, utile Pour protéger les cookies contre le vol ou la falsification par des attaques de script intersite.

5 : Fonction Cookie PHP

1.

setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
setcookie() définit le cookie qui sera envoyé au client avec les en-têtes HTTP restants.

Comme les autres en-têtes HTTP, le cookie doit être envoyé avant que le script puisse produire une sortie (en raison de restrictions de protocole).

Veuillez appeler cette fonction avant de produire une sortie (y compris et ou des espaces).

Une fois le cookie défini, il pourra être lu en utilisant $_COOKIE la prochaine fois que vous ouvrirez la page.

Des valeurs de cookies existent également dans $_REQUEST.

Paramètres

Paramètre Description
nom Nom du cookie.
Valeur du cookie. Cette valeur est stockée sur l'ordinateur de l'utilisateur. Ne stockez pas d'informations sensibles.
Délai d'expiration des cookies.
参数 描述
name Cookie 名称。
value

Cookie 值。 这个值储存于用户的电脑里,请勿储存敏感信息。

expire

Cookie 的过期时间。

这是个 Unix 时间戳,即 Unix 纪元以来的秒数。

也就是说,基本可以用 time() 函数的结果加上希望过期的秒数。

path

Cookie 有效的服务器路径。

设置成 '/' 时,Cookie 对整个域名 domain 有效。 

如果设置成 '/foo/', Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效。 

默认值是设置 Cookie 时的当前目录。

domain

Cookie 的有效域名/子域名。 

设置成子域名,会使 Cookie 对这个子域名和它的三级域名有效。 

要让 Cookie 对整个域名有效,只要设置成域名就可以了。

secure

设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。

设置成 TRUE 时,只有安全连接存在时才会设置 Cookie。 

如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类 Cookie 。

httponly

设置成 TRUE,Cookie 仅可通过 HTTP 协议访问。

这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。 

要有效减少 XSS 攻击时的身份窃取行为,可建议用此设置,不过这个说法经常有争议。

Il s'agit d'un horodatage Unix, le nombre de secondes depuis l'époque Unix. En d'autres termes, vous pouvez essentiellement utiliser le résultat de la fonction time() plus le nombre de secondes que vous souhaitez expirer.
Chemin de serveur valide du cookie. Lorsqu'il est défini sur '/', le cookie est valable pour l'ensemble du domaine du nom de domaine. S'il est défini sur '/foo/', le cookie n'est valable que pour le répertoire /foo/ et ses sous-répertoires dans le domaine. La valeur par défaut est le répertoire actuel lorsque le cookie est défini.
Nom de domaine/sous-domaine valide pour Cookie. est défini sur un nom de sous-domaine, ce qui rendra le cookie valide pour ce nom de sous-domaine et son nom de domaine de troisième niveau. Pour rendre le cookie valide pour l'ensemble du nom de domaine, il suffit de le définir sur le nom de domaine.
Définissez si ce cookie est uniquement transmis aux clients via des connexions HTTPS sécurisées fin. Lorsqu'il est défini sur TRUE, le cookie ne sera défini que lorsqu'une connexion sécurisée existe. Si cette exigence est gérée côté serveur, les programmeurs doivent envoyer ces cookies uniquement via des connexions sécurisées.
Défini sur TRUE, le cookie n'est accessible que via HTTP protocole. Cela signifie que les cookies ne sont pas accessibles via des langages de script​​tels que JavaScript. Pour réduire efficacement le vol d'identité lors des attaques XSS, il est recommandé d'utiliser ce paramètre, mais cette affirmation est souvent controversée.

返回值

如果在调用本函数以前就产生了输出,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浏览器上的小甜点

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn