浅谈COOKIE和SESSION区别


Posted in PHP onJuly 19, 2015

一、cookie介绍

cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

1、设置Cookie

PHP用SetCookie函数来设置Cookie。

SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下:
int SetCookie(string name, string value, int expire, string path, string domain, int secure);

参数说明:cookie名称,cookie值,过期时间(int),有效路径,有限域名,https传递才有效

注意:当前设置的Cookie不是立即生效的,而是要等到下一个页面时才能看到.这是由于在设置的这个页面里Cookie由服务器传递给客户浏览器,在下一个页面浏览器才能把Cookie从客户的机器里取出传回服务器的原因。

使用例子:

普通使用:

setcookie('name','PHP淮北');

带失效时间的:
setcookie('name','PHP淮北',time()+24*60*60);//1day

Cookie是面向路径的 ,默认存储在当前文件下,如果没有设置路径,不同文件下的cookie默认保存在不同文件夹下,如图:默认保存在mytest文件夹下

2、接收和处理Cookie

用户端与服务端的web通信协议是http。而PHP通过http取得用户数据惯用的三种方法分别是:POST方法、GET方法还有Cookie。而PHP默认传递方法正是Cookie,也是最佳方法。

比如设置一个名为MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个与普通变量一样的变量,名为$myCookie,这个变量的值就是Cookie的值

3,删除Cookie

要删除一个已经存在的Cookie,有两个办法:

一是调用只带有name参数的SetCookie,那么名为这个name的Cookie将被从关系户机上删掉;例如:setcookie('name','');
另一个办法是设置Cookie的失效时间为time()或time()-1,那么这个Cookie在这个页面的浏览完之后就被删除了(其实是失效了)。 例如:setcookie('name','PHP淮北',time()-24*60*60);
要注意的是,当一个Cookie被删除时,它的值在当前页在仍然有效的。
使用Cookie的注意事项:

首先是必须在HTML文件的内容输出之前设置(Cookie是HTTP协议头的一部分,用于浏览器和服务器之间传递信息,所以必须在任何属于HTML文件本身的内容输出之前调用Cookie函数。
在PHP页面可以先使用

ob_start();//开启

code…..

ob_end_flush(); //刷新缓存

可以防止header提示错误);

不同的浏览器对Cookie的处理机制不一样
cookie限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。
当前设置的Cookie不是立即生效的,而是要等到下一个页面时才能看到

二、session介绍

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息,每一个网站访客都会被分配给一个唯一的标志符,即会话ID,它的存放形式无非两种:要么经过url传递,要么保存在客户端的Cookies里.当然,你也可以将Session保存到数据库里,这样会更安全,但效率方面会有所下降.url方式传递安全性肯定太差,PHP的会话机制是通过设置Cookie,在Cookie中保存会话id(Session ID),在服务器端会生成session文件,与用户进行关联,Web应用程序存储与这些Session相关的数据,并在各页面间进行传递.

PHP相关函数

在PHP中有关Session的函数比较多,不过我们最常用到的也就这么几个函数:

session_start():启用session机制,在需要用到session的程序文件的最开始调用它.

session_register():注册session变量

session_unregister(): 删除session变量(一个一个删除)

session_is_registered(): 判断session变量是否注册

session_distroy(): 销毁所有session变量(所有session变量销毁,包括文件)

需要注意下面几个方面:

1.函数session_start()必须在程序最开始执行,在其前面不能有任何输出内容,否则

就会出现“Warning:Cannot send session cookie - headers already

sent"类似这样的警告信息.

2.函数session_register()用于注册要保存在session中的相关变量,其用法如下:

<?php
 
$val = "session value";
 
session_register("val");
 
?>

val即为要注册的session变量名,在注册时一定不要加上"$"符号,只写其变量名称即可.

3.函数session_unregister()与上面函数用法完全相同,但功能相反,上面函数是注册

session变量,而其则是删除指定的session变量.

4.函数session_is_registered()用于判断session变量是否注册.

5.函数session_destroy()主要用于在系统注销和退出时,销毁所有的session变量,它没有参数,直接调用即可。

Session与PHP.ini的关系配置

1,session.save_handler = file

用于读取/回写session数据的方式,默认是files。它会让PHP的session管理函数使用指定的文本文件存储session数据

2,session.save_path = “/xammp/temp/”

指定保存session文件的目录,可以指定到别的目录,但是指定目录必须要有httpd守护进程属主(比如apache或www等)写权限,否则无法回存session数据。它还可以写成这样session.save_path = “N;/path” 其中N是整数。这样使得不是所有的session文件都保存在同一个目录中,而是分散在不同目录。这对于服务器处理大量session文件是很有帮助的。(注:目录需要自己手工创建)

3,session.auto_start = 0

如果启用该选项,用户的每次请求都会初始化session。不推荐使用,最好通过session_start()显示地初始化session。

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
PHP脚本数据库功能详解(中)
Oct 09 PHP
PHP 遍历文件实现代码
May 04 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
openPNE常用方法分享
Nov 29 PHP
PHP中strtotime函数使用方法分享
Jan 10 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
php提高网站效率的技巧
Sep 29 PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 PHP
php提取微信账单的有效信息
Oct 01 PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 PHP
PHP正则表达式之RCEService回溯
Apr 11 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 #PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 #PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 #PHP
PHP使用ODBC连接数据库的方法
Jul 18 #PHP
PHP封装的Twitter访问类实例
Jul 18 #PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 #PHP
thinkphp autoload 命名空间自定义 namespace
Jul 17 #PHP
You might like
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
nginx下安装php7+php5
2016/07/31 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
React styled-components设置组件属性的方法
2018/08/07 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
Python中请使用isinstance()判断变量类型
2014/08/25 Python
Django URL传递参数的方法总结
2016/08/28 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Django如何自定义分页
2018/09/25 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Python的互斥锁与信号量详解
2019/09/12 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
廉洁自律演讲稿
2014/05/22 职场文书
社团活动总结报告
2014/06/27 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
2014年档案室工作总结
2014/12/01 职场文书
读后感作文评语
2014/12/25 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android