浅谈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制作静态网站的模板框架(四)
Oct 09 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
学习php分页代码实例
Oct 24 PHP
PHP安全下载文件的方法
Apr 07 PHP
golang与PHP输出excel示例
Jul 22 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 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 curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
PHP 代码规范小结
2012/03/08 PHP
smarty内置函数section的用法
2015/01/22 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
flask实现验证码并验证功能
2019/12/05 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
神路信息Java面试题目
2013/03/31 面试题
物业管理专业个人的自我评价
2013/11/19 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
高中运动会广播稿
2014/01/21 职场文书
《木笛》教学反思
2014/03/01 职场文书
六一儿童节活动总结
2014/08/27 职场文书
大班下学期幼儿评语
2014/12/30 职场文书