首页 >头条 > 正文

php cookie(专题)

原创2020-08-10 13:44:4501486

本专题通过图文、视频的形式全面介绍了php cookie的由来,php cookie属性有哪些,php cookie函数用法以及php cookie实际应用实例,通俗易懂!欢迎php中文网的同学们学习!

一:什么是 Cookie ?

cookie 常用于识别用户。

cookie 是一种服务器留在用户计算机上的小文件。

每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。

通过 PHP,您能够创建并取回 cookie 的值。

相关专题推荐:php session

二:Cookie 的诞生

由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的。

Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。

比如判断用户是否是第一次访问网站。目前最新的规范是RFC 6265,它是一个由浏览器服务器共同协作实现的规范。

三:Cookie 的原理

Snipaste_2020-07-30_11-06-03.png

第一次访问网站的时候,浏览器发出请求,服务器响应请求后,会将cookie放入到响应请求中,在浏览器第二次发请求的时候,会把cookie带过去,服务端会辨别用户身份,当然服务器也可以修改cookie内容。

四:Cookie 属性

Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。

Snipaste_2020-07-30_11-13-06.png

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不被跨站脚本攻击窃取或篡改。

五: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() 定义了 Cookie,会和剩下的 HTTP 头一起发送给客户端。

和其他 HTTP 头一样,必须在脚本产生任意输出之前发送 Cookie(由于协议的限制)。

请在产生任何输出之前(包括 <html> 和 <head> 或者空格)调用本函数。

一旦设置 Cookie 后,下次打开页面时可以使用 $_COOKIE 读取。

Cookie 值同样也存在于 $_REQUEST。

参数

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

返回值

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

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

示例

<?php
$value = 'something from somewhere';

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('username', 'phpcn', time() + 3600);

//获取Cookie
$username = $_COOKIE['username'];

//删除Cookie
setcookie('username', '', time() - 3600);

//修改Cookie
setcookie('username', 'phpcn-updated', 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, '', 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 = '/', $domian = '')
{
	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 = 'expire';
    const OPTION_PATH = 'path';
    const OPTION_DOMAIN = 'domain';
    const OPTION_SECURE = 'secure';
    const OPTION_HTTPONLY = 'httponly';

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

    /**
     * Cookie 选项
     * @var array
     */
    private $options = [
        self::OPTION_EXPIRE => 3600,
        self::OPTION_PATH => '/',
        self::OPTION_DOMAIN => 'domain',
        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('Cookie option not exists:{$name}');
    }

    /**
     * 设置多个选项
     * @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) == '{' ? json_decode($value) : $v;
            }
            return $arr;
        } else {
            return substr($value, 0,1) == '{' ? 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 . '[' . $k . ']',
                        '',
                        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,
                    '',
                    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['username']) ? $_COOKIE['username'] : null;
}

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

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


if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $username = $_POST['username'];
    $password = $_POST['password'];

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

    die('登录成功!');
}

?>

<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浏览器上的小甜点

php中文网最新课程二维码
  • 相关标签:cookie
  • 本文原创发布php中文网,转载请注明出处,感谢您的尊重!
  • 相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • php session 包含PHP Session概念、基本函数使用方法、PHP Session使用案例、PHP Session视频教程以及相关精选文章,欢迎学习!
    php不能获取cookie处理方法:首先设置一个cookie,键为a,值为value;然后在cookie字符串中搜索a的cookie并返回它的值;最后刷新浏览器,再次访问服务器的时候就多了一个a=value
    PHPCMS模块使用方法:首先打开【模块管理】并找到【】;然后点击【添加】进行添加;接着将的基本信息填写完成后点击【确定】;最后将相关的文章添加进中即可。
    php cookie乱码的解决办法:首先打开相应的PHP代码文件;然后通过php中的内置函数“unicode_encode”将一个unicode字符串转变为想要的编码方式即可解决乱码问
    今天学生在做练习的时候遇到了PHP中的cookie必须刷新才能生效的问,可用以下方法解决...
    Cookie是存储在客户端计算机上的文本文件,它们保留用于跟踪目的。PHP透明地支持HTTP cookie
    php读取Cookie的方法:我们可以通过超全局变量$_COOKIE来读取cookie的值。在php5之后从客户端发送来的cookie信息会被自动保存在$_COOOKIE全局数组中。
    php清除cookie的方法:1、使用函数“setcookie()”将cookie的值设置为空或者为NULL;2、通过将cookie过期时间设置为过去时间,其方法为只要将“setcookie()”第3个参数设置为
    dedecms模板的使用方法:首先打开“inc_archives_view.php”文件;然后添加代码为“else if($ctag->GetName()=="specnote"
    页面做SEO优化的方法:1、网站页面设计优化;2、网站标签优化;3、​url优化;4、其他权重标签、链接优化;5、页面更新。页面比内容页面更能刺激用户的视觉感触。
    php修改cookie的方法:首先打开需要修改的内容;然后在任何其他输出发送前对cookie进行修改赋值,代码为【$_COOKIE[$var] = $value;setcookie($var,$value
    帝国cms调用本信息所属并且带链接的实现方法:首先登录帝国cms后台;然后依次选择“模板管理”->“管理标签”->“导入标签”;接着在内容模板中加上“[echoinfozt]0[/echoinfozt
    php删除cookie的方法:1、将cookie的值设置为空,语句为“setcookie('cookiename', '')或者setcookie(cookiename, NULL);”;2、将cookie
    PHP中Session和Cookie区别:1、Cookie数据存放在客户的浏览器中,Session数据存放在服务器中;2、Session根据浏览器进程存在,而Cookie的生存时间可以设置和调整;3、Session
    php清除浏览器中的cookie的方法:可以利用setcookie()函数来设置cookie的过期时间,从而达到清除cookie的目的。
    phpcookie和session区别:存储位置:Cookie存储在客户端浏览器中,相对不安全;Session内容所在文件存储在服务器中,相对更安全。
    php cookie和session区别有:1、cookie是一种远程浏览器端存储数据并以此来跟踪和识别用户的机制,而session在PHP中用于保持用户连续访问Web应用时的相关数据;2、cookie
    Cookie常用于识别用户,是一种服务器留在用户计算机上的小文件,每当同一台计算机通过浏览器请求页面时,这台计算机将会发送Cookie,通过PHP,开发者能够创建并取回Cookie的值。
    php中session和cookie区别是:1、cookie是通过扩展http协议实现的,而session是一种类似散列表的形式保存信息;2、cookie是保存在【客户端】的,而session是保存在【
    php设置cookie的作用域的方法:可以通过setcookie()函数来进行设置。

    专题推荐

    推荐视频教程
  • JS和jQuery开发购物车教程JS和jQuery开发购物车教程
  • PHP电商网站商品秒杀功能实现思路分析PHP电商网站商品秒杀功能实现思路分析
  • PHP基于Cookie的购物车模块设计PHP基于Cookie的购物车模块设计
  • Laravel电商项目实战课程Laravel电商项目实战课程
  • 视频教程分类