php之Cookie与Session详解
Cookie管理
Cookie是在HTTP协议下,通过服务器或脚本语言可以维护客户浏览器上信息的一种方式,Cookie的使用很普遍,许多提供个人化服务的网站都是利用Cookie来区别不同用户,以显示与用户相应的内容,如Web接口的免费E-Mail网站,就需要用到Cookie。
1、什么是Cookie
Cookie是一种在客户浏览器端存储数据并以此来跟踪和识别用户的机制。简单的说,Cookie是Web服务器暂时存储在用户磁盘上的一个文本文件,并随后被Web浏览器读取。当用户再次访问该Web网站时,网站通过读取Cookie文件记录这位访客的特定信息(如上次访问的位置、花费的时间、用户名和密码等),从而迅速作出响应。如在页面中不需要输入用户的ID和密码即可直接登录网站等。
Cookie文本文件的命令格式如下:
用户名@网站地址[数字].txt
PS:在Cookie文件夹下,每个Cookie文件都是一个简单而又普通的文本文件,而不是程序。Cookie文件中的内容大多都经过了加密处理,因此,表面看来只是一些字母和数字组合,而只有服务器的CGI处理程序才知道它们的真正的含义。
2、Cookie的功能
Web服务器可以通过Cookie包含的信息来筛选或维护这些信息,以判断在HTTP传输中的状态。
Cookie常用于以下3个方面:
1)记录访客的某些信息。如访客访问的次数,输入过的信息,还可以自动记录访客上次登录的用户名。
2)在页面之间传递变量。
3)将所查看的Internet页存储在Cookie临时文件夹中,可以提高以后浏览的速度。
PS:一般不要用Cookie保存数据集或其他大量数据,并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端计算机中,因此最好不要保存敏感的、未加密的数据,否则会影响网络的安全性。
3、创建Cookie
在PHP中通过setcookie()函数创建Cookie。在创建Cookie之前必须了解的是,Cookie是HTTP头标的组成部分,而头标必须在页面其他内容之前发送,因此它必须是最先输出。若在setcookie()函数前输出一个HTML标记、echo语句,甚至一个空行都会导致程序出错。
语法格式如下:
bool setcookie(string name[,string value[,int expire[,string path[,string domain[,int secure]]]]])
setcookie()函数的参数说明如表所示。
| 参 数 | 说明 | 举例 |
| name | Cookie的变量名 | 可以通过$_COOKIE["cookiename"]调用变量名为cookiename的Cookie |
| value | Cookie变量的值,该值保存在客户端,不能用来保存敏感数据 | 可以通过$_COOKIE["values"]获取名为values的值 |
| expire | Cookie的失效时间,expire是标准的UNIX时间标记,可以用time()函数或mktime()函数获取,单位为秒 | 如果不设置Cookie的失效时间,那么Cookie将永远有效,除非手动将其删除 |
| path | Cookie在服务器端的有效路径 | 如果该参数设置为"/",则它在整个domain内有效,如果设置为“/11”,它在domain下的/11 目录及其子目录内有效。默认是当前目录 |
| domain | Cookie有效的域名 | 如果要是Cookie在mrbccd.com域名下的所有子域都有效,应该设置为mrbccd.com |
| secure | 指用Cookie是否仅通过安全的HTTPS,值为0或1 | 如果值为1,则Cookie只能在HTTPS连接上有效;如果值为默认值0,则Cookie在HTTP和HTTPS连接上均有效 |
实例
<?php
setcookie("Cookie","www.xx.com");
setcookie("Cookie","www.xx.com",time()+60); //设置Cookie有效时间为60s
setcookie("Cookie",$value,time()+3600,"/cc/","www.xx.com",1);
//设置有效时间为一小时,有效目录为/cc/,有效域名为"www.xx.com"
?>
Cookie失效后,文件自动删除。
4、读取Cookie
在PHP中可以直接通过超级全局数组$_COOKIE[]来读取浏览器端的Cookie值。
<?php
if(!isset($_COOKIE["visittime"])){
setcookie("visittime",date("y-m-d H:i:s"));
echo "欢迎您第一次访问网站!";
}else{
setcookie("visittime",date("y-m-d H:i:s"),time()+60);//如果Cookie存在,则设置Cookie失效时间
echo "您上次访问网站的时间为:".$_COOKIE["visittime"];
echo "<br>";
}
echo "您本次访问网站的时间为:".date("y-m-d H:i:s");
?>
5、删除Cookie
如何未设置Cookie的失效时间,则在关闭浏览器时自动删除Cookie数据,如果为Cookie设置了失效时间,浏览器会记住Cookie的数据,即使用户重启计算机,只要没到期,再次访问网站Cookie仍然有效。
如果要在关闭浏览器之前删除Cookie文件,方法有两种:一种是使用setcookie()函数删除,另一种是在浏览器中手动删除Cookie。
1)使用setcookie()函数删除Cookie
删除和创建Cookie都使用setcookie()函数,删除Cookie只需要将setcookie()函数中的第二个参数设置为空值,将第3个参数Cookie的失效时间设置为小于系统的当前时间即可。
例如,setcookie("name",time()-1),此处就将Cookie的失效时间设置为当前时间减1秒,也可以设置为0,也可以直接删除Cookie。
2)在浏览器中手动给删除Cookie
6、Cookie的生命周期
如果Cookie不设定失效时间,就表示它的生命周期就为浏览器会话的期间,只要关闭浏览器,Cookie就会自动消失。这种Cookie被称为会话Cookie,一般不保存在硬盘上,而是保存在内存中。
如果设置了失效时间,那么浏览器会把Cookie保存到硬盘中,再次打开浏览器时会依然有效,直到它的有效期超时。
虽然Cookie可以长期保存在客户端浏览器中,但也不是一成不变的。因为浏览器最多允许存储300个cookie文件,而且Cookie文件支持的最大容量是4kb,每个域名最多支持20Cookie,如果达到限制时,浏览器会自动地随机删除Cookie文件。
Session 管理
对比Cookie,Session会话文件中保存的数据在PHP脚本中以变量的形式创建的,创建的会话变量在生命周期(20 minutes)中可以被跨页的请求所引用。另外,Session会话是存储在服务器端的,相对安全,并且不像Cookie那样有存储长度的限制。
1、什么是Session(会话)
有始有终的一系列动作/消息,具体是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统所经过的时间,实际上是一个特定的时间概念。
2、原理
当启动一个Session会话时,会生成一个随机且唯一的session_id,也就是Session的文件名,此时session_id存储在服务器的内存中。当关闭页面时此id会自动注销,重新登录此页面,会再次生成一个随机且唯一的id。
3、Session的功能
Session在Web技术中非常重要,由于网页是一种无状态的连接程序,因此无法得知用户的浏览状态。通过Session则可记录用户的有关信息,以提供用户再次以此身份对Web服务器提交请求时作确认。Session适用于存储信息量比较少的情况,并且对存储内容不需要长期存储,那么使用Session把信息存储到服务器端比较合适。
4、创建Session(会话)
创建一个Session会话的流程是:
启动会话--注册会话--使用会话--删除会话
1)启动会话
启动PHP会话的方式有两种:一种是使用session_start()函数,另一种是使用session_register()函数为会话创建一个变量来隐含地启动会话。
#session_start()函数启动会话,在页面开始位置调用,然后会话变量被登录到数据$_SESSION。session_start()函数之前浏览器不能有任何输出。
bool session_start(void);
#session_register()函数创建会话,为会话创建一个变量来隐含地启动会话,但要求设置php.ini文件的选项,即将register_globals指令设置为On,然后重启服务器。
PS:使用session_register()函数时,不需要调用session_start()函数,PHP会在创建变量之后隐含地调用session_start()函数。
2)注册会话
会话变量被创建后,全部保存在数组$_SESSION中,通过数组$_SESSION创建一个会话变量很容易,只要直接给该数组添加一个元素即可。
例如:
<?php
session_start();//启动session
$_SESSION["admin"]=null;//声明一个名为admin的变量,并赋空值
?>
3)使用会话
首先判断会话变量是否有一个会话ID存在,如果不存在,就创建一个,并且使其能够通过全局数组$_SESSION进行访问;如果已经存在,则将这个已创建的会话变量载入以供用户使用。
<?php
if(!empty($_SESSION["session_name"])){ //判断存储用户名的session_name 是否为空
$value = $_SESSION("session_name");
}
?>
4)删除会话
删除会话的方法主要有三种,即删除单个会话、删除多个会话和结束当前会话。
1>删除单个会话
删除单个会话即删除单个会话变量,同数组的操作一样,直接注销$_SESSION数组的某个元素即可。
unset($_SESSION["user"]);
PS:使用unset()函数时,要注意$_SESSION数组中元素不能省略,即不可以一次注销整个数组,这样会禁止整个会话的功能,如unset($_SESSION)函数会将全局变量$_SESSION销毁,而且没有办法将其恢复,用户也不能再注册$_SESSION变量。
2>删除多个会话
删除多个会话即一次注销所有的会话变量,可以通过将一个空的数组赋值给$_SESSION来实现。
$_SESSION = array();
3>结束当前会话
如果整个会话已经结束,首先应该注销所有的会话变量,然后使用session_destroy()函数清除结束当前的会话,并清空会话中的所有资源,彻底销毁Session。
session_destory()
5、Session 设置失效时间
Session失效时间的设置方法主要有两种。
1)客户端没有禁止Cookie
1>使用session_set_cookie_params()设置Session的失效时间,此函数是Session结合Cookie设置失效时间。
<?php
$time = 1*60;//设置Session失效时间
session_set_cookie_param($time);
session_start();
$_SESSION[username] = "admin";
?>
PS:session_set_cookie_params()必须在session_start()之前调用,但是不推荐此函数,在使用过程中会出现与浏览器不兼容的问题。
2>使用setcookie()函数可对Session设置失效时间,如让Session在一分钟后失效。
<?php
session_start();
$time = 1*60;
setcookie(session_name(),session_id(),time()+$time."\");//最后一个参数是放置cookie的路径
$_SESSION["user"] = "admin";
?>
2)客户端禁止Cookie
当客户端禁用Cookie时,Session页面间传递会失效。
解决方法有4种。
1>在登录之前提醒用户必须打开Cookie。
2>设置php.ini文件中的session.use_trans_sid=1,或者编译时打开-enable-trans-sid选项,让PHP自动跨页面传递session_id。
3>通过GET方法,隐藏表单传递session_id。
<form id="form1" name="form1" method="post" action="xx.php?<?=session_name();?>=<?=session_id();?>">
//接收页面头部
<?php
$session_name = session_name();//取得Session名称
$session_id = $_GET[$session_name];//取得session_id GET方式
session_id($session_id);
session_start();
$_SESSION["user"] = "admin";
?>
4>使用文件或者数据库存储session_id,在页面间传递中手动调用。
php之Cookie与Session详解的更多相关文章
- Cookie与Session详解
来源:<PHP核心技术与最佳实践> 列旭松 陈文 著 Cookie与Session详解读书笔记,从概念.操作.应用.注意事项以及区别等几方面详细阐述两者的基础知识,它们都是针对HTTP协议 ...
- cookie和session详解
cookie和session的区别 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当下次你再光临同 ...
- cookie和session详解[转]
文章链接: http://aijezdm915.iteye.com/blog/1272530 cookie.session 都是用来保存用户状态信息的一种方法或手段 二者主要区别是: ...
- 会话技术cookie和session详解
什么是会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话技术解决了什么问题 每个用户与服务器进行交互的过程中,各自会有一 ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- cookie 和session 详解
cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于c ...
- http无状态协议,cookie和session详解(一)
1.HTTP无状态协议 首先看百度百科给出的定义: HTTP无状态协议,是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传, 这样导致可能每次连接传送的数据量增大 ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
- web开发(三) 会话机制,Cookie和Session详解
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6422391.html>,在此仅供学习参考之用. 一.会话 ...
随机推荐
- hdu1573X问题(不互素的中国剩余定理)
X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- Ruby中,&:(ampersand colon)的用法
前几日看Ruby代码,发现一个奇怪的用法,如下: a=['a', 'b', 'c'].map! &:upcase p a #["A", "B", &qu ...
- Qt开始学习的一些问题
1.需要将qmake.moc和qvfb的路径加入到系统的环境变量: qmake.moc:export PATH=$PATH:/usr/local/Trolltech/QtEmbedded-4.6.1- ...
- vnc远程linux服务器黑屏
本来想尝试用vnc连接到linux服务器上,图形化操作一点东西,不过遇到了困难,记录方便查询. 1,打开vnc 选择Ip和端口,连接上去显示黑屏. 2,于是想到系统原先没有安装图像化桌面.so, y ...
- 虚拟化之KVM的安装篇
1,在安装KVM之前,首先需要在自己的电脑开启cpu虚拟化技术(这个需要BIOS中设置). 如下操作都是在本人虚拟机中设置,所以可以看到我多添加一块磁盘,目的是用来做kvm虚拟机的磁盘. 另外,虚拟机 ...
- 那些 Cynthia 教我的事 之 PMSec (一)
一.ViewState的使用 在项目中,我一直在用Common的方法读取一些信息,但是Cynthia习惯将它存入ViewState中. ViewState 它是由ASP.NET页面框架管理的一个隐藏的 ...
- 关于JavaScript 原型的理解
原型的含义是指:如果构造器有个原型对象A,则由该构造器创建的实例(Object Instance)都必然复制于A.““在JavaScript中,对象实例(Object Instance)并没有原型,而 ...
- Docker 生成Node.js web app(含端口映射)
1.新建目录src,并进入src目录 [xiejdm@localhost Documents]$ mkdir src [xiejdm@localhost Documents]$ cd src/ 2.创 ...
- python基础之 list和 tuple(元组)
list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...
- Direct2D WIC绘制图片
绘制图片需要用到WIC,WIC的功能包括: 编解码图片.也可以自定义图片解码插件. 读取图片元数据. 图像处理(最高支持每通道32位). 内置支持一些流行的格式.包括:BMP v5, GIF 89a/ ...