欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

文摘  PHP中COOKIE和SESSION的使用以及区别

PHP学习 网络 996 0评论

一、COOKIE


1. 认识cookie


Cookie英文是曲奇饼、小甜品的意思,在web应用中,也类似于程序大餐中的小甜品,在 Internet 中,Cookie 实际上是指小量信息,是由 Web 服务器创建的,将信息存储在用户计算机上的文件,主要作用是记录web应用中用户的基本信息,也可以叫做浏览器缓存或Cookies。

web应用都是基于http协议进行网络交互,而http协议对每个web页面提交的信息不会进行记录,而很多网站都有会员功能,如果每次跳转页面的时候都重新提交一次会员信息,那这个工作任务就太繁琐,因此有了Cookie的诞生。web应用程序可以在操作时,由服务器端代码生成一个Cookie信息保存在客户端的浏览器中,生成一个很小的文件,此时的文件存在RAM运行内存中,如果用户关闭浏览器会自动删除Cookie信息;如果程序生成一个带有时间设定的cookie,那么cookie文件将存在物理内存中,下次访问同一个web应用时,在设置时间范围内,web应用仍能获取到cookie信息。


2. 使用cookie


(1)创建Cookie值

// 函数设置Cookie

Setcookie("标识键值","Cookie值","有效时间","有效作用域 / 表示当前网站下好使");

// 赋值设置Cookie

$_COOKIE['标识键值'] = "Cookie值";


(2)修改Cookie值

// 函数设置Cookie

Setcookie("标识键值","Cookie新值","新有效时间","新的有效作用域");

// 赋值设置Cookie

$_COOKIE['标识键值'] = "Cookie新值";


(3)删除Cookie值

// 函数设置Cookie

Setcookie("标识键值","空值",time()-1);


(4)查看Cookie值

// 查看所有Cookie值

var_dump($_COOKIE);

// 查看具体的Cookie值

var_dump($_COOKIE['键值']);


(5)使用举例

<?php
// 增加 Cookie
// 设置Cookie函数法 setCookie();
setCookie("test1","test1");
// 设置Cookie赋值法
$_COOKIE['test2'] = "test2";
// 修改Cookie
// 修改Cookie setCookie()
setCookie("test1","test1->test3");
// 修改Cookie赋值法
$_COOKIE["test2"] = "test2->test4";
// 查询所有Cookie值
var_dump($_COOKIE);
// 查询键值为test2的值
var_dump($_COOKIE['test2']);
// 删除键值为test1的值
setCookie("test1","",time()-1);
// 设置test2值为空
$_COOKIE['test2'] = "";
var_dump($_COOKIE);


3. Cookie的缺点


(1)Cookie相对不安全,容易被盗取,泄露个人隐私;

(2)Cookie必须依赖于客户端,客户端(浏览器)可以关闭Cookie存储功能,如果客户端关闭Cookie,则web应用无法存储Cookie值在客户端本地。 


4. 注意事项


(1)使用setCookie设置或修改cookie值后,在第一次刷新页面时打印Cookie不会有结果,只在本地生成Cookie文件,第二次刷新的时候才可以获取新增或修改的值。如果使用$_COOKIE新增值或者修改值,在修改后第一次请求就可以获取到结果。

(2)使用setCookie删除Cookie值时,第一次删除只是删除了文件,在当前代码中打印Cookie数据仍然可以打印出Cookie值,刷新页面,重新访问后,对应的Cookie值已被删除。

所有只要是setCookie函数作用的值,第一次访问不会产生对应的反应,第二次访问会产生效果。而$_COOKIE操作的数据会在第一次访问直接产生效果。


二、SESSION


1. 认识session


Session概念:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。[copy百度]

Session机制:session内容一般以文件的形式存储于服务器中,而本地浏览器会存储一个与服务器中session文件对应的Cookie值,Cookie存储的是键值为“PHPSESSID”的Seeion_id值,用户在访问web应用时,每次跳转发生http请求时,会自动把这个存储session_id的Cookie值发送过去,因此web应用的所有页面都可以获取到这个SESSION_ID值,也就可以通过session_id获取服务器中存储的session值,当用户关闭浏览器后,cookie存储的session_id自动清除,一般服务器存储的session文件也会在30分钟后自动清除。【大白话说明^O^】


2. 使用session


(1)Session在PHP中使用需要先开启session,因此第一步是开启session,函数是session_start()。在开启session的同时,浏览器会自动生成一个session_id,类似于“negp7iebtghcukaj06butg4a55”。


(2)添加Session

$_SESSION['session键值'] = "session值";


(3)修改session

$_SESSION['session键值'] = "session新值";


(4)查看session值

// 查看全部session

var_dump($_SESSION);

// 单独查看键值为test的Session值

var_dump($_SESSION['test']);


(5)删除session

// 删除session值,但保留数据类型

$_session['session键值'] = array();

// 删除cookie中的session_id

$session_id = session_name();

setCookie($session_id,"",time()-1);

// 释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session_id

session_unset();

// 删除当前用户对应的session文件以及释放session_id,但内存中的$_SESSION变量内容依然保留

session_destroy();


(6)使用举例

<?php
// 开启session
session_start();
// 增加session
$_SESSION['test'] = "session增加内容";
$_SESSION['test1'] = "session增加内容";
// var_dump($_SESSION['test']);
// 修改session
$_SESSION['test'] = "session修改内容";
// var_dump($_SESSION['test']);
// 查看全部session
var_dump($_SESSION);
// 单独查看键值为test的Session值
var_dump($_SESSION['test']);
// 删除session
// 删除session的变量值(但保留数据类型)
// $_SESSION['test'] = array();
// 删除所有的SESSION(包括文件)一般用于退出操作
// 1. 使客户端COOKIE中的SESSIONID过期
// $session_id = Session_name();
// setcookie($session_id,"",time()-1);
// 2. 释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session_id
// session_unset();
// 3. 删除当前用户对应的session文件以及释放session_id,但内存中的$_SESSION变量内容依然保留
session_destroy();
var_dump($_SESSION);


3. session缺点


Session完全依赖于Cookie,所以cookie的缺点同样是session的缺点。


4. 注意事项


session_start()函数前面不得有任何其他语句。


三、应用场景


登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。

session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。


1.Cookie


通俗讲,是访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些步骤。更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案。

Cookie的主要内容包括:名字,值,过期时间,路径和域。使用Fiddler抓包就可以看见,比方说我们打开百度的某个网站可以看到Headers包括Cookie,如下: 

BIDUPSID: 9D2194F1CB8D1E56272947F6B0E5D47E 

PSTM: 1472480791 

BAIDUID: 3C64D3C3F1753134D13C33AFD2B38367:FG 

ispeed_lsm: 2 

MCITY: -131: 

pgv_pvi: 3797581824 

pgv_si: s9468756992 

BDUSS: JhNXVoQmhPYTVENEdIUnQ5S05xcHZMMVY5QzFRNVh5SzZoV0xMVDR6RzV-bEJZSVFBQUFBJCQAAAAAAAAAAAEAAACteXsbYnRfY2hpbGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALlxKVi5cSlYZj 

BD_HOME: 1 

H_PS_PSSID: 1423_21080_17001_21454_21408_21530_21377_21525_21193_21340 

BD_UPN: 123253 

sug: 3 

sugstore: 0 

ORIGIN: 0 

bdime: 0

key, value形式。过期时间可设置的,如不设,则浏览器关掉就消失了,存储在内存当中,否则就按设置的时间来存储在硬盘上的,过期后自动清除,比方说开关机关闭再打开浏览器后他都会还存在,前者称之为Session cookie 又叫 transient cookie,后者称之为Persistent cookie 又叫 permenent cookie。路径和域就是对应的域名,a网站的cookie自然不能给b用。


2.Session


存在服务器的一种用来存放用户数据的类HashTable结构。

浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。 

一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。

当用户在应用程序的 Web页间跳转时,存储在 Session 对象中的变量不会丢失而是在整个用户会话中一直存在下去。

Session的实现方式和Cookie有一定关系。建立一个连接就生成一个session id,打开几个页面就好几个了,这里就用到了Cookie,把session id存在Cookie中,每次访问的时候将Session id带过去就可以识别了.


3.区别


存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象

一个在客户端一个在服务端。因Cookie在客户端所以可以编辑伪造,不是十分安全。

Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。

域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。


四、COOKIE和SESSION的区别联系


session与cookie区别:

1、保存位置稍有区别

cookie数据存放在客户的浏览器上,服务器端不用保存。session数据放在服务器上,本地内存也有一份。


2、安全性不同

cookie安全性不如session。因为普通cookie保存在本地硬盘上,黑客可以伪造url等方式发起xss攻击,获取本地硬盘保存状态的cookie,进而窃取用户的敏感信息。

session则不同,只有在用户登录此网站时发起xss攻击才能获取session信息,关闭浏览器之后,session即被销毁,安全性较cookie要好


3.跨域支持上的不同

Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

 

4.服务器压力的不同

Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。考虑到减轻服务器性能方面,应当使用COOKIE。


5. 存取方式的不同

Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。

而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。


6.cookie的保存内容大小有限制

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。


session与cookie优缺点:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:

将登陆信息等重要信息存放为SESSION

其他信息如果需要保留,可以放在COOKIE中


session与cookie的联系:

session是需要借助cookie才能正常工作的,如果客户端完全禁止cookie,session将失效


session和cookie的应用:

如何利用实现自动登录

当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。客户后来重新连接时,这个用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户无需给出明确的用户名和密码,就可以访问服务器上的资源


会话跟踪:

通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session cookie和persistent cookie的结合我们就实现了跨窗口的session tracking


原文地址:https://blog.csdn.net/createNo_1/article/details/80555972

转载请注明: ITTXX.CN--分享互联网 » PHP中COOKIE和SESSION的使用以及区别

最后更新:2018-10-02 16:04:46

赞 (1) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽