浅谈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中exec与system用法区别分析
Sep 22 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
yii通过小物件生成view的方法
Oct 08 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
PHP实现的回溯算法示例
Aug 15 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
thinkphp5 redis缓存新增方法实例讲解
Mar 24 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的类树(支持无限分类)
2006/10/09 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
php操作redis缓存方法分享
2015/06/03 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
PyQt5实现简单的计算器
2020/05/30 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
Python3.9新特性详解
2020/10/10 Python
自动化专业个人求职信范文
2013/11/29 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
毕业证代领委托书
2014/09/26 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书