浅谈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动态生成JavaScript代码
Mar 09 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
解析php中memcache的应用
Jun 18 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
Yii框架表单模型和验证用法
May 20 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
PHP查询分页的实现代码
Jun 09 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP策略模式写法
Apr 01 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中的数组操作函数整理
2008/08/18 PHP
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
AJAX的使用方法详解
2017/04/29 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python fabric使用笔记
2015/05/09 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
利用Python检测URL状态
2019/07/31 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
python统计文章中单词出现次数实例
2020/02/27 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
extern是什么意思
2016/03/10 面试题
司马光教学反思
2014/02/01 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
Python中tqdm的使用和例子
2022/09/23 Python