• 微信号
目录

php基础

您当前的位置:首页 > 我的笔记 > php基础>php与Cookie技术

php与Cookie技术

cookie概述

在web应用中,cookie类似于会员卡,但用户浏览访问web服务器是,服务器会给用户发送一些信息,这些信息都会保存在cookie中。这样但该浏览器再次访问服务器时,都会请求头中将cookie发送给服务器,方便服务器对浏览器做出正确的响应

服务器想客户端发送cookie时,会在PHP响应头中增加Set-Cookie响应头字段。Set-Cookie头字段中设置的cookie遵循一定的语法格式

Set-Cookie: City=shanghai; Path=/;

city表示cookie的名称,shanghai表示cookie的值,path表示cookie的属性。需要注意的是cookie必须以键值对的形式存在,其属性可以有多个,但这些属性之间必须用分号(;)和空格分隔

cookie在浏览器和服务器之间的传输过程

陵小宇博客-phpcookie会话流程

但用户第一次访问服务器时,服务器会在响应信息中添加Set-Cookie头字段,经信息一cookie的形式发送给浏览器,一但用户接受了服务器发送cookie信息,就会保存到浏览器的缓冲区中,这样,当浏览器后续访问服务器时,就会将信息以cookie的形式发送给服务器,从而使服务器分辨出当前请求是由那个用户发出的。

创建cookie

在使用cookie之前,首先需要创建cookie,在php中通过setcookie()函数创建cookie,其声明格式如下

bool setcookie(string $name[, string $value [, int $expire=0 [, srting $path [, string $domain [, bool $secure]]]]])

参数$name是必须的,其他的参数都是可选的。其中,$value表示cookie的值;$expire表示cookie的有效期;$path表示cookie在服务器端的有效路径;$domain表示cookie的有效域名; $secure用于指定cookie是否通过安全的https链接来传输

案例:使用setcookie()函数来创建cookie

<?php
    //创建2个cookie,并设置cookie的有效期为1小时
    setcookie("city","火星城",time() +60*60*1);
    setcookie("district","火星区",time() +60*60*1);
    echo "cookie创建成功";
?>

运行结果

陵小宇博客-php创建cookie

注意

1.用于cookie是http请求信息头的一部分,因此setcookie()函数必须在其它信息被输出到浏览器前调用,否则会导致程序出错

2.一个浏览器或一个域名下最多可以春风cookie的数量以及每个cookie的大小都与浏览器的版本相关

读取cookie

当用户通过浏览器访问服务器时,服务器会给用户发型一些信息,这些信息很多都会被保存在coolie中,要想获取cookie的xinxi,可以使用超全局数组$_COOKIE[]来读取,具体示例如下

$key=$COOKIE['key']

$val表示一个变量,由于存储从cookie中获取的数据,key是一个字符串。

案例

<?php
    $city=$_COOKIE['city']; //读取$_COOKIE[]中的信息
    $district=$_COOKIE['district'];
    echo "city:".$city."<br>";
    echo "district:".$district."<br>";
?>

运行结果

陵小宇博客-读取cookie

删除cookie

当cookie创建后,如果没有设置它的有效期,其cookie文件会在关闭浏览器时自动被删除,但是,如果希望在关闭浏览器前删除cookie文件,则可以使用setcookie()函数实现,与使用setcookie()函数创建cookie不同,删除cookie时只需要将setcookie()函数中的参数$value设置为空,参数设置为小于系统当前时间即可

案例

<?php
    //删除名为city的cookie
    setcookie("city","",time()-60*60*1);
    echo "city的cookie被删除";
?>

运行结果

陵小宇博客-读取cookie

案例:显示用户上次的访问时间

创建一个名为cookie.php的文件

<?php
    header('content-type:text/html;charset=utf-8');
    //设置当前登陆时间到cookie中,有效期为1小时
    setcookie("LoginTime",time()+60*60*1);
    //判断cookie是否存在
    if(isset($_COOKIE['LoginTime'])){
        echo "你的上次访问时间是".date('H:i:s',$_COOKIE['LoginTime']);
    }else {
        echo "你是首次访问本站";
    }
?>

使用stecookie()函数创建一个名为LoginTime的cookie,然后通过if语句判断该cookie是否存在,如果存在,说明不是第一次访问,提示上次访问的时间,否则,提示您是首次访问本站

第一次访问

陵小宇博客-cookie

第二次访问

陵小宇博客-cookie