QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 163|回复: 0

[PHP开发] session 与 cookie 的区别详解

[复制链接]

1

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
QQ
发表于 2017-9-29 14:15:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
SESSION
            
一:应用
cookie与session技术相似,,都是用来存储使用者的相关资料,不同在于,cookie将数据存放在客户端,session将数据存放在服务器端

二:session概述
例子:
cookie:去商场办一张会员卡,你自己拿着!下次取得时候还要把卡带上,不然就不能以会员的身份买东西!卡丢了,更是不可以了!
session:取商场办了一张会员卡,由商场保存这张卡,用户不用把卡待在身上,只要去商场买东西的时候告诉卡号就行!

session就是这样,客户端仅仅需要保存服务器为用户创建的衣蛾session标识符(相当于会员卡的卡号),就是Session ID
,而在服务器端(文件/数据库/Memcache中),保存session变量的值,Session ID 是一个不会重复又不容易找到规律的32位十六进制数组组成的字符串!Session ID 会保存客户端,如果cookie停止使用,那么可以将session id 保存在用户浏览器地址栏的URL中,当用户请求web服务器的时候,就会把session id 发送给服务器,再通过Session ID 提取保存在服务器中的Session 变量!


三:session的声明,使用,注册,读取,注销,销毁
1:session 在使用 前,必须先开启
session_start();
此函数两个作用:(1):开始一个会话
                                     (2):返回已经存在的会话

2:当第一此访问网站的时候,session_start()函数就会创建一个唯一的session ID   并且通过 HTTP的响应头,将这个session ID,保存到客户端Cookie中,同时在服务器端创建唯一一个以session ID 命名的文件,用于保存这个用户的额回话信息!

3:$_SESSION['name'] = 'xinfeng';
$_SESSION['password'] = '123';

4:unset($_SESSION['name']);
删除Session中注册的用户名变量

注意:不可以  unset($_SESSION),这样会删除整个$_SESSION数组,不能再通过$_SESSION超全局数组注册变量了!
但是:如果想删除空整个$_SESSION数组
可以:$_SESSION = array();
5:注销了变量,还要删除保存变量的session文件,和客户端中的session ID
在php脚本中,可以调用session_name()函数获取session的名称!删除保存在客户端的session ID

6:一个五步的方法
1-1:开启session,并且初始化
session_start();

1-2:注册session
$_SESSION['name'] = 'xinfeng';
1-3:删除所有session变量,或逐个删除
$_SESSION = array();
unset($_SESSION['name']);

1-4:如果使用基于cookie的session
使用setCookie()删除包含Session ID的cookie

if(isset($_SESSION($_COOKIE[session_name()])))
{
setcookie(session_name(), '' ,time()-10,'/')
}

1-5:彻底删除session文件
session_destroy();

COOKIE
           
一:Cookie的优势
1:Cookie是一种客户端技术,这种技术让服务器能将一些只需要存放在客户端  或者  可以在客户端运算的资料,存放在计算机系统中,这样就不需要在连接服务器的时候再通过网络传输,处理这些资料,提高网页处理的效率,减轻服务器的压力!


二:Cookie的运行机制
1:Cooie是HTTP标头的一部分,因此设置cookie的函数setCookie(),必须在其他信息被输出到浏览器之前调用!
这和调用header() 函数的限制一样!
2:当某个网站的用户通过客户端浏览器,访问服务器的“网页一”,进行网页的登陆,成功验证登陆后!
3:在“网页一”的PHP脚本中,会把和这个用户相关的信息,以键值对的形式,通过HTTP协议响应头部信息发送给客户端,设置到客户端计算机的Cookie中

4:当用户再次访问同一台服务器的其他php脚本时候,就会自动携带Cookie中的数据一起访问,通过HTTP请求的头部信息传回给服务器,在服务器的每个脚本中都可以接受Cookie中的数据,并重新对登陆者的身份进行验证,而不需要每访问一个页面就重新输入一次登陆者的信息!


三:Cookie的具体操作
1:向客户端设置Cookie
setCookie('name','xinfeng',time()+60*60*24);
向客户端发送一个cookie,变量名为name,值为xinfeng,保存一周时间

【第四参数】:'/test';表示在当前的目录或子目录下有效
【第五参数】:'.baidu.com';表示Cookie能.baidu.com域名下的所有子域中有效,虽然 ' . ' 并不需要,但是加上会兼容更多的浏览器;
【第六参数】:1;当最后一个参数设置为1 的时候,Cookie仅仅在安全的连接中才能被设置;
注意:如果需要可以设置多个cookie,多调用几次函数就行,但是如果cookie的识别名相同,则后的值覆盖签名的值!


2:PHP脚本读取Cookie
(1):在设置cookie的脚本中,第一次读取它的信息不会生效,必须刷新页面  或者  在另一个页面才能看到cookie的值,因为cookie要先被设置在客户端!
(2):从PHP5 开始,任何从客户端发送过来的信息,都会自动保存在$_COOKIE全局数组中,所以在每个PHP脚本中都可以从全局数组中读取相应的cookie信息!

(3)echo $_COOKIE['name'];


3:数组形态的Cookie应用
setCookie("user['name']" , 'xin' , time()+24*60*60);
setCookie("user['pwd']" , '123' , time()+24*60*60);
setCookie("user['email']" , '@@' , time()+24*60*60);

那么,$_COOKIE[' user ']就是一个数组了!


4:删除Cookie
方法一:通过设置cookie的函数,setCookie(),忽略所有的参数列表,仅仅导入cookie的识别名称,覆盖,值为0蛋!!!

方法二:利用函数setCookie(),把第三个参数设置的比time()  小就行!!

5:实际中的应用中,一般在设置Cookie前,都需要把将要设置的cookie,先用函数setCookie('name','',time()-1);把以前同名的cookie删除!









评分

参与人数 1Z币 +2 收起 理由
大熊猫 + 2 很给力!

查看全部评分

难地的事情天天做日日做就容易了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    战略合作|联系方式|广告赞助|商务合作|手机版|小黑屋|( 京ICP备14036609号-6 )

GMT+8, 2017-10-22 08:57

© 2013-2017 Powered by Discuz! X3.3. 本站由 又拍云 提供 CDN 图片存储服务

快速回复 返回顶部 返回列表