Cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘上,在客户端对服务器的请求中发回它。PHP透明地支持HTTP Cookie。可以利用他在远程浏览器端存储数据并以此来跟踪和识别用户的机制。

  Cookie是用来将使用者资料记录在客户端的技术,这种技术让Web服务器能将一些只需存放于客户端,或者可以在客户端进行运算的资料,存放于用户的计算机系统中。就不需要在连接服务器时,再通过网络传输、处理这些资料,进而提高网页处理的效率,降低服务器的负担。

向客户端计算机中设置Cookie

  Cookie的建立十分简单,只要用户的浏览器支持Cookie功能,就可以使用PHP内建的setcookie()函数来新建立一个Cookie。Cookie是HTTP标头的一部分,因此setcookie()函数必须在其他信息被输出到浏览器前调用,所以即使是空格或空行,都不要在调用setcookie()函数之前输出,这和调用header()函数的限制类似。

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

  setcookie()函数定义一个和其余的HTTP标头一起发送的Cookie,它的所有参数是对应HTTP标头Cookie资料的属性。

参数 描述 示例
$name Cookie的识别名称 使用$_COOKIE['cookiename']调用名为cookiename的Cookie
$value

Cookie的值,可以为数值或者字符串形态,此值保存在客户端,不要用来保存敏感数据

假定第一个参数为“cookiename”,可以通过$_COOKIE['cookiename']获取其值
$expire

Cookie的生存期限,这个是UNIX时间戳,即从UNIX纪元开始的秒数

如time()+60*60*24*7将设定Cookie在一周后失效,如果未设定Cookie,则会在会话结束后就立即失效

$path

Cookie在服务器的指定路径,当设定此值时,服务器中只有指定路径下的网页或程序可以存取此Cookie

如果该参数设为“/”,Cookie在整个domain内有效,如果设为“/foo/”,Cookie就只在domain下的/foo/目录及其及目录内有效,默认值为设定Cookie的当前目录

$domain

指定此Cookie所属服务器的网址名称,预设是建立此Cookie服务器的网址

要使Cookie能在example.com域名下的所有子域名都有效的话,该参数应该设为“.example.com”。虽然“.”并不是必须的,但加上他会兼容更多的浏览器。如果该参数设为www.example.com的话,就只有www子域内有效

$secure

指明Cookie是否仅通过安全的HTTPS连接传送,Cookie中的安全识别常数,如果设定瓷质代表只有在某些情况下,才能在客户端与服务器之间传递

当设为TRUE时,Cookie仅在安全的连接中被设置,默认为FALSE

  如果只有$name这一个参数,则原有此名称的Cookie选项将会被删除,你也可以使用空字符串(“ ”)来略过此参数。参数$expire和$secure是个整数,你可以使用0来略过此参数,而不是使用空字符串。但参数$expire是一个正规的UNIX时间整数。有time()或mktime()函数传回。参数$secure指出此Cookie将只有在安全HTTPS连接时传送。在实际建立Cookie是通常仅使用前三项参数。

setcookie("username","skygao",time() + 60*60*24*7);
//向客户端发送一个Cookie,将变量username值为skygao,保存客户端一周的时间

  如果访问改脚本就会设置Cookie,并将用户名添加到访问者电脑的Cookie中去。上例表示建立一个识别名称位“username”的Cookie,其内容为字符串“skygao”,而在客户端有效的存储期限则指定为一周。

setcookie("username","skygao",time() + 60*60*24*7,'/test/','.example.com',1);

  在上例中,参数“/test/”表示Cookie只有在服务器的这个目录或子目录中有效。参数“.example.com”是Cookie能在如example.com域名下的所有子域名都有效,虽然“.”并不必需的,但加上它会兼容更多的浏览器。当最后一个参数设置为1时,则Cookie仅在安全的连接中才能被设置。如果需要向客户端设置多个Cookie,可以通过调用多次setcookie()函数实现。但如果两次设置相同的Cookie识别名称,则后设置的Cookie会把值赋给与自己同名的Cookie变量,如果原来的值不为空,则会被覆盖。

在PHP脚本中读取Cookie的资料内容

  如果Cookie设置成功,客户端就拥有了Cookie文件,用来保存Web服务器为其设置的用户信息。Cookie是一个以普通文本形式记录信息的,虽然直接使用文本编辑器就可以打开浏览,但直接去阅读Cookie文件中的信息没有意义。而是当客户再次访问该网站时,浏览器会自动把与该站点对应的Cookie信息全部发回给服务器。自PHP5以后,任何从客户端发送过来的Cookie信息,都会被自动保存在$_COOKIE全局数组中,所以在每个PHP脚本中都可以从该数组中读取对应的Cookie信息。

  在设置Cookie的脚本中,第一次读取它的信息并不会生效,必须刷新或者到下一个页面才可以看到Cookie值。因为Cookie要先被设置到客户端,再次访问时才能被发送回来,这是才能被获取。

数组形态的Cookie应用

  Cookie也可以利用多维数组的形式,将多个内容值存储在相同Cookie名称标识符下。但不能直接使用setcookie()函数,将数组变量插入到第二个参数作为Cookie的值,因为setcookie()函数的第二个参数必须传入一个字符串的值。如果需要将数组变量设置到Cookie中,可以在setcookie()函数的第一个参数中,通过在Cookie标识名称指定数组下标的形式设置。

setcookie("user[username]","skygao");
setcookie("user[password]",md5('123456'));
setcookie("user[email]",'skygao@example.com');

  在上面一段程序中,建立了一个标识名称为“user”的Cookie,但其中包含了三个数据,这样就形成了Cookie的关联数组形态。设置成功后,如果需要在PHP脚本中获取其值,同样是使用$_COOKIE超级全局数组。但这时的$_COOKIE数组并不是唯一的了,而是变成了一个二维数组,一维的下标变量是“user”。

foreach($_COOKIE['user'] as $key=>$value){
echo $key.":".$value."\n";
}

删除Cookie

  如果需要删除保存在客户端的Cookie,可以使用两种方法。而这两种方法和设置Cookie一样,也是调用setcookie()函数实现删除的动作:第一种方式,省略setcookie()函数的所有参数列,仅导入飞一个参数Cookie识别名称参数,来删除指定名称的Cookie资料;第二种方式,利用setcookie()函数把目标Cookie设定为“已过期”状态。

setcookie('account');
//只指定Cookie识别名称一个参数,即删除客户端中这个指定名称的Cookie资料 setcookie('isLogin',"",time() - 100);
//设置Cookie在当前时间之前已经过期,因此系统会自动删除识别名称为isLogin的Cookie

  第一种方法将Cookie的生存时间默认设置为空,则生存期限与浏览器一样,浏览器关闭时Cookie就会被删除。而对于第二种删除Cookie的方法,Cookie的有效期限参数的含义指当超过设定时间时,系统会自动删除客户端的Cookie。

会话控制Cookie的应用的更多相关文章

  1. http协议。会话控制cookie、session

    http协议是无状态的协议.每次访问页面的http协议都是独立的,正是因为http协议是无状态的,所以导致访问一个页面后再去访问另一个页面的时候,一些数据会消失,比如:用户的登录信息就会消失.那么怎么 ...

  2. php会话控制cookie/session

    设置cookie PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个: name( Cookie名)可以通过$_COOKIE[' ...

  3. 会话控制:Cookie和session

    HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本.图形.视频和所有其他数据所有的规则.HTTP是一种无状态的协议,说明每次请求的处理都与之前或之后的请求无关.虽然这种简化实现对于HTTP的 ...

  4. 会话控制cookie和session

    Cookie Cookie简介 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时, ...

  5. 会话控制——Cookie和Session

    Cookie简介 l  HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时,买了一条 ...

  6. 会话控制:session与cookie

    我们在浏览网站时,访问的每一个web页面都需要使用"http协议"实现.而HTTP协议是无状态协议,就是说HTTP协议没有一个内建机制来维护两个事务之间的状态.当一个用户请求一个页 ...

  7. 会话控制:SESSION,COOKIE

    1.http协议: HTTP—超文本传输协议,在TCP协议(长连接.像一个硬件)基础上; 特点:短连接,无状态协议,没法记录本次连接的状态;适用于静态页面的访问,对于后期某些页面是需要浏览器预知客户信 ...

  8. PHP会话控制Session与Cookie

    理解会话控制的概念: 阅读过HTTP协议相关资料的同学都会知道HTTP协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议,所谓无状态,指的是不会维护http请求数据,http请求是 ...

  9. cookie、localStorage、sessionStorage和会话控制机制

    简介 cookie cookie的内容主要包括:名字Name.值Value.域Domain.路径Path.过期时间Expires/Max-Age.大小Size.HTTP.Secure.SameSite ...

随机推荐

  1. 关于CoInitialize和CoUninitialize调用的有关问题

    本人封装了一个类,里面需要用到ADO连接数据库, 所以需要初始化COM环境以及释放COM环境, 我打算在构造函数里面执行CoInitialize,在析构函数里面执行CoUninitialize 但是程 ...

  2. poj 2531(dfs)

    题目链接:http://poj.org/problem?id=2531 思路:由于N才20,可以dfs爆搞,枚举所有的情况,复杂度为2^(n). #include<iostream> #i ...

  3. 57、Design Support Library 介绍及环境搭建

    一.Material Design几个要素 扁平化.简洁: 水波反馈: 良好体验的过渡动画: 材料空间位置的直观变化: 二.Android Studio配置 在 build.gradle 文件中加入, ...

  4. ICE新手入门版

    1.ICE是什么?  网络通信引擎ICE(Internet Communications Engine)是Zero C公司的分布式系统开发专家实现的一种新的高性能的面向对象中间件平台.从根本上说, I ...

  5. $().each() 与 $.each()区别,以及 jquery ajax 应用

    在jquery 中我们可以选择$().each() 与 $.each() 进行迭代对象和数组 $(items).each(function(){ //item })   , 而后者则 $.each(i ...

  6. mybatis的oracle的in超过1000的写法

    <if test="preIds != null and preIds.size() > 0"> AND PRE_ID IN <trim suffixOve ...

  7. java倒序输出List

    先贴代码 package com.tsubasa.collection; import java.util.ArrayList; import java.util.Arrays; import jav ...

  8. mysql线上操作常用命令

    备份命令: mysqldump -uroot -p --default-character-set=utf8 --hex-blob -R --log-error=/var/log/backup-log ...

  9. 网络编程3 网络编程之缓冲区&subprocess&粘包&粘包解决方案

    1.sub简单使用 2.粘包现象(1) 3.粘包现象(2) 4.粘包现象解决方案 5.struct学习 6.粘包现象升级版解决方案 7.打印进度条

  10. 服务器1M带宽同时能承受多少人在线

    最近网站的流量一直在增长,这个肯定是好事.不过也有个麻烦的问题,目前本站用的的虚拟空间,每月流量30G,虽然95%的图片都已外链,但流量还是很吃紧,日均2000ip,4月份流量34g左右,单JS的响应 ...