会话控制Cookie的应用
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的应用的更多相关文章
- http协议。会话控制cookie、session
http协议是无状态的协议.每次访问页面的http协议都是独立的,正是因为http协议是无状态的,所以导致访问一个页面后再去访问另一个页面的时候,一些数据会消失,比如:用户的登录信息就会消失.那么怎么 ...
- php会话控制cookie/session
设置cookie PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个: name( Cookie名)可以通过$_COOKIE[' ...
- 会话控制:Cookie和session
HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本.图形.视频和所有其他数据所有的规则.HTTP是一种无状态的协议,说明每次请求的处理都与之前或之后的请求无关.虽然这种简化实现对于HTTP的 ...
- 会话控制cookie和session
Cookie Cookie简介 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时, ...
- 会话控制——Cookie和Session
Cookie简介 l HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时,买了一条 ...
- 会话控制:session与cookie
我们在浏览网站时,访问的每一个web页面都需要使用"http协议"实现.而HTTP协议是无状态协议,就是说HTTP协议没有一个内建机制来维护两个事务之间的状态.当一个用户请求一个页 ...
- 会话控制:SESSION,COOKIE
1.http协议: HTTP—超文本传输协议,在TCP协议(长连接.像一个硬件)基础上; 特点:短连接,无状态协议,没法记录本次连接的状态;适用于静态页面的访问,对于后期某些页面是需要浏览器预知客户信 ...
- PHP会话控制Session与Cookie
理解会话控制的概念: 阅读过HTTP协议相关资料的同学都会知道HTTP协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议,所谓无状态,指的是不会维护http请求数据,http请求是 ...
- cookie、localStorage、sessionStorage和会话控制机制
简介 cookie cookie的内容主要包括:名字Name.值Value.域Domain.路径Path.过期时间Expires/Max-Age.大小Size.HTTP.Secure.SameSite ...
随机推荐
- RPolar项目进度记录
PolarMesDlg.cpp,中的 void PolarMesDlg::CImage2CImagedata(unsigned char* src,CImage* desimg,unsigned ch ...
- CentOS中Apache虚拟主机(virtualHost)设置在/home目录下的若干问题
在Ubuntu中安装LAMP是非常简单的意见事情.但是在CentOS中却遇到了很多问题. 首先是CentOS中必须手动配置iptables,把80端口开放出来,不然,是访问不到的,开放80端口在/et ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.3——使用Robotium进行功能测试
问题: 你想要使用Robotium库测试activity. 解决方案: 增加Robotium依赖,编写自己的测试脚本. 讨论: Android Test Support Library提供类可以操作a ...
- 51、自定义View基础和原理
一.编写自己的自定义View最简单的自定义View,继承View通过覆盖View的onDraw方法来实现自主显示利用Canvas和paint来绘制显示元素(文字,几何图形等) <com.myvi ...
- 亲测Google开源JPEG图片压缩算法,可将JPEG文件缩小%35
具体方法如下(windows 平台) GitHub上下载guetzli源码,地址https://github.com/google/guetzli GitHub上下载 vcpkg源码,地址https: ...
- 【原】storm源码之mac os x编译twitter storm源码
twitter storm是由backtype公司创始人nathanmarz一手研发和开源的流计算(实时计算)框架,堪称实时计算领域的hadoop.nathanmarz也是在mac os x环境下开发 ...
- AngularJS 讲解,一 数据绑定
AngularJS 完全使用javascript 编写的客户端技术.通过原生的Model-View-Controller(MVC,模型视图控制器)功能增强了HTML.这个选择可以快捷和愉悦地构建出 ...
- IE强制不使用兼容模式
[caption id="attachment_471" align="alignnone" width="431"] 强制不使用兼容模式[ ...
- 墨菲定律(Murphy's Law)
https://baike.baidu.com/item/墨菲定律/746284?fr=aladdin 墨菲定律是一种心理学效应,是由 爱德华·墨菲(Edward A. Murphy)提出的. 主要内 ...
- Nginx-rtmp直播之业务流程分析 http://www.mamicode.com/info-detail-2287896.html
Nginx-rtmp直播之业务流程分析 http://www.mamicode.com/info-detail-2287896.html