Heim >Schlagzeilen >PHP-Cookie (Thema)

PHP-Cookie (Thema)

PHPz
PHPzOriginal
2020-08-05 18:02:114416Durchsuche

In diesem Thema werden der Ursprung von PHP-Cookies, die Eigenschaften von PHP-Cookies, die Verwendung der PHP-Cookie-Funktion und die praktischen Anwendungsbeispiele von PHP-Cookies anhand von Bildern, Texten und Videos umfassend vorgestellt. Es ist leicht zu verstehen! Begrüßen Sie Studenten von der chinesischen PHP-Website zum Lernen!

PHP-Cookie (Thema)

Erstens: Was sind Cookies?

Cookies werden häufig zur Identifizierung von Benutzern verwendet.

Ein Cookie ist eine kleine Datei, die der Server auf dem Computer des Benutzers hinterlässt.

Jedes Mal, wenn derselbe Computer eine Seite über den Browser anfordert, wird das Cookie von diesem Computer gesendet.

Mit PHP können Sie Cookie-Werte erstellen und abrufen.

Empfehlungen zu verwandten Themen: php-Sitzung

II: Die Geburt von Cookie

Da das HTTP-Protokoll zustandslos ist, muss das serverseitige Geschäft zustandsbehaftet sein.

Der ursprüngliche Zweck von Cookies bestand darin, Statusinformationen im Web zu speichern, um die serverseitige Nutzung zu erleichtern.

Ermitteln Sie beispielsweise, ob der Nutzer die Website zum ersten Mal besucht. Die neueste Spezifikation ist RFC 6265, eine Spezifikation, die von zusammenarbeitenden Browserservern implementiert wird.

Drei: Das Prinzip von Cookies

PHP-Cookie (Thema)

Wenn Sie die Website zum ersten Mal besuchen, sendet der Browser eine Anfrage. Nachdem der Server auf die Anfrage geantwortet hat, fügt er das Cookie in die Antwort ein Bei der ersten Anfrage wird das Cookie übermittelt und der Server identifiziert den Benutzer. Natürlich kann der Server auch den Cookie-Inhalt ändern.

Vier: Cookie-Attribute

Cookie ist eine kleine Textdatei von nicht mehr als 4 KB. Sie besteht aus einem Namen (Name), einem Wert (Value) und mehreren anderen, die zur Steuerung der Cookie-Gültigkeitsdauer verwendet werden. Sicherheit und Verwendung. Eine Reihe optionaler Attribute.

PHP-Cookie (Thema)

Name stellt den Namen des Cookies dar.
Wert
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不被跨站脚本攻击窃取或篡改。
stellt den Wert des Cookies dar. 🎜
🎜Gibt die Website oder Domain an, die auf das Cookie zugreifen kann. 🎜🎜Der Cookie-Mechanismus folgt nicht der strengen Same-Origin-Richtlinie, die es einer Subdomain ermöglicht, das Cookie ihrer übergeordneten Domain zu setzen oder abzurufen. 🎜
🎜 definiert das Verzeichnis auf der Website, in dem auf das Cookie zugegriffen werden kann. 🎜
🎜Was ist die Gültigkeitsdauer im Bild? Browser-Cookies werden standardmäßig gespeichert. Wenn der Browser geschlossen und die Sitzung beendet wird, wird das Cookie gelöscht. 🎜
🎜Geben Sie an, ob das HTTPS-Sicherheitsprotokoll zum Senden von Cookies verwendet werden soll. 🎜🎜Mithilfe des HTTPS-Sicherheitsprotokolls können Cookies bei der Übertragung zwischen Browser und Webserver vor Diebstahl und Manipulation geschützt werden. Diese Methode kann auch zur Identitätsauthentifizierung von Websites verwendet werden, d. h. während der Phase des HTTPS-Verbindungsaufbaus prüft der Browser die Gültigkeit des SSL-Zertifikats der Website. 🎜
HttpOnly td> wird verwendet, um zu verhindern, dass clientseitige Skripte über das Attribut document.cookie auf Cookies zugreifen. Zum Schutz beitragen Cookies können nicht durch Cross-Site-Scripting-Angriffe gestohlen oder manipuliert werden.

Fünf: PHP-Cookie-Funktion

1. setcookie – Cookie senden

setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool

setcookie() definiert das Cookie und wird zusammen mit den verbleibenden HTTP-Headern an den Client gesendet.

Wie andere HTTP-Header müssen Cookies gesendet werden, bevor das Skript eine Ausgabe erzeugen kann (aufgrund von Protokolleinschränkungen).

Bitte rufen Sie diese Funktion auf, bevor Sie eine Ausgabe erzeugen (einschließlich und

oder Leerzeichen).

Sobald das Cookie gesetzt ist, können Sie es mit $_COOKIE lesen, wenn Sie die Seite das nächste Mal öffnen.

Cookie-Wert existiert auch in $_REQUEST.

Parameter

Parameter Beschreibung
name Cookie-Name.
value
参数 描述
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 攻击时的身份窃取行为,可建议用此设置,不过这个说法经常有争议。

Cookie-Wert. Dieser Wert wird auf dem Computer des Benutzers gespeichert. Speichern Sie keine vertraulichen Informationen. 🎜
🎜Cookie-Ablaufzeit. 🎜🎜Dies ist ein Unix-Zeitstempel, die Anzahl der Sekunden seit der Unix-Epoche. 🎜🎜Mit anderen Worten, Sie können grundsätzlich das Ergebnis der Funktion time() plus die Anzahl der Sekunden verwenden, die ablaufen sollen. 🎜
🎜Cookie Gültiger Serverpfad. 🎜🎜Wenn es auf „/“ gesetzt ist, ist das Cookie für die gesamte Domainnamen-Domain gültig. 🎜🎜Wenn es auf „/foo/“ gesetzt ist, ist das Cookie nur für das Verzeichnis /foo/ und seine Unterverzeichnisse in der Domäne gültig. 🎜🎜Der Standardwert ist das aktuelle Verzeichnis, wenn das Cookie gesetzt wird. 🎜
🎜 Gültiger Domain-/Subdomainname für Cookie. 🎜🎜Legen Sie es als Subdomain-Namen fest, wodurch das Cookie für diesen Subdomain-Namen und seinen Domänennamen der dritten Ebene gültig wird. 🎜🎜Um das Cookie für den gesamten Domainnamen gültig zu machen, setzen Sie es einfach auf den Domainnamen. 🎜
secure td> 🎜Legen Sie fest, ob dieses Cookie nur über sichere HTTPS-Verbindungen an den Client weitergegeben wird. 🎜🎜Bei der Einstellung TRUE wird das Cookie nur gesetzt, wenn eine sichere Verbindung besteht. 🎜🎜Wenn diese Anforderung serverseitig erfüllt wird, müssen Programmierer solche Cookies nur über sichere Verbindungen senden. 🎜
httponly td> 🎜Auf TRUE gesetzt, kann auf das Cookie nur über das HTTP-Protokoll zugegriffen werden. 🎜🎜Das bedeutet, dass über Skriptsprachen wie JavaScript nicht auf Cookies zugegriffen werden kann. 🎜🎜Um Identitätsdiebstahl bei XSS-Angriffen effektiv zu reduzieren, wird die Verwendung dieser Einstellung empfohlen, allerdings ist diese Aussage oft umstritten. 🎜

返回值

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn