首页 » SEO优化 » php提取ifnamecookie技巧_Cookie详解

php提取ifnamecookie技巧_Cookie详解

访客 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

原文如下,记录到此供往后查阅并希望好文章能被更多须要的人看到

背景

php提取ifnamecookie技巧_Cookie详解

在HTTP协议的定义中,采取了一种机制来记录客户端和做事器端交互的信息,这种机制被称为cookie,cookie规范定义了做事器和客户端交互信息的格式、生存期、利用范围、安全性。

php提取ifnamecookie技巧_Cookie详解
(图片来自网络侵删)

在JavaScript中可以通过 document.cookie 来读取或设置这些信息。
由于 cookie 多用在客户端和做事端之间进行通信,以是除了JavaScript以外,做事真个措辞(如PHP)也可以存取 cookie。

Cookie详解

Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制。
从实现上说,Cookie是存储在客户端上的一小段数据,浏览器(即客户端)通过HTTP协议和做事器端进行Cookie交互。

Cooke独立于措辞存在,严格地说,Cookie并不是由PHP、Java等措辞实现的,而是由这些措辞对Cookie进行间接操作,即发送HTTP指令,浏览器收到指令便操作Cookie并返回给做事器。
因此,Cookie是由浏览器实现和管理的。
举例说,PHP并没有真正设置过Cookie,只是发出指令让浏览器来做这件事。
PHP中可以利用setcookie() 或 setrawcookie() 函数设置Cookie。
setcookie()末了一个参数HttpOnly设置了后,JavaScript就无法读取到这个Cookie。

设置Cookie时需把稳:①函数有返回值,false失落败,true成功,成功仅供参考,不代表客户端一定能吸收到;②PHP设置的Cookie不能立即生效,要等下一个页面才能看到(Cookie从做事器传给浏览器,下个页面浏览器才能把设置的Cookie传回给做事器);如果是JavaScript设置的,是立即生效的;③Cookie没有显示的删除函数,可以设置expire过期韶光,自动触发浏览器的删除机制。

Cookie是HTTP头的一部分,即现发送或要求Cookie,才是data域;setcookie()等函数必须在数据之前调用,这和header() 函数是相同的。
不过也可以利用输出缓冲函数延迟脚本的输出,知道设置好所有Cookie和其他HTTP标头。

Cookie常日用来存储一些不是很敏感的信息,或者进行登录掌握,也可用来记住用户名、记住免密码登录、防止刷票等。
每个域名下许可的Cookie是有限定的,根据浏览器这个限定也不同。
Cookie不是越多越好,它会增加宽带,增加流量花费,以是不要滥用Cookie;不要把Cookie当作客户真个存储器来用。
一个域名的每个Cookie限定以4千字节(KB)键值对的形式存储。

还有一种Cookie是Flash创建的,成为Flash Shard Object,又称Flash Cookie,纵然清空浏览器所有隐私数据,这类执拗的Cookie还会存在硬盘上,由于它只受Flash管理,很多网站采取这种技能识别用户。

Cookie跨域,紧张是为了统一运用平台,实现单点登录;需利用P3P协议(Platform for Privacy Preferences),通过P3P利用户自己可以指定浏览器的隐私策略,达到存储第三方Cookie的目的,只须要在响运用户要求时,在HTTP的头信息中增加关于P3P的配置信息就可以了。
Cookie跨域涉及两个不同的运用,习气上称为第一方和第三方。
第三方常日是来自别人的广告、或Iframe别的网站的URL,这些第三方网站可能利用的Cookie。

Cookie格式

Cookie中保存的信息都是文本信息,在客户端和做事器端交互过程中,cookie信息被附加在HTTP头中通报,cookie的信息由键/值对组成。
下面是一个HTTP头中cookie的例子:

Set-Cookie: key = value; Path=/

Cookie中存放的信息包含cookie本身属性和用户自定义属性,一个cookie只能包含一个自定义键/值对。
Cookie本身属性有”Comment” 、”Domain”、”Max-Age”、”Path”、”Secure”、”Version”。

Comment 属性是cookie的产生着对该cookie的描述;

Domain 属性定义可访问该cookie的域名,对一些大的网站,如果希望cookie可以在子网站中共享,可以利用该属性。
例如设置Domain为 .bigsite.com ,则sub1.bigsite.com和sub2.bigsite.com都可以访问已保存在客户真个cookie,这时还须要将Path设置为/。

Max-Age 属性定义cookie的有效韶光,用秒计数,当超过有效期后,cookie的信息不会从客户端附加在HTTP头中发送到做事端。

Path 属性定义网站上可以访问cookie的页面的路径,缺省状态下Path为产生cookie时的路径,此时cookie可以被该路径以及其子路径下的页面访问;可以将Path设置为/,使cookie可以被网站下所有页面访问。

Secure 属性值定义cookie的安全性,当该值为true时必须是HTTPS状态下cookie才从客户端附加在HTTP中发送到做事端,在HTTP时cookie是不发送的;Secure为false时则可在HTTP状态下通报cookie,Secure缺省为false。

Version 属性定义cookie的版本,由cookie的创建者定义。

Cookie的创建

Cookie可以在做事器端创建,然后cookie信息附加在HTTP头中传到客户端,如果cookie定义了有效期,则本保存在客户端本地磁盘。
保存cookie的文件是一个文本文件,因此不用担心此文件中的内容会被实行而毁坏客户的机器。
支持Web端开拓的措辞都有创建cookie的方法或函数,以及设置cookie属性和添加自定义属性的方法或函数,末了是将cookie附加到返回客户真个HTTP头中。

创建cookie时如果不指定生存有效韶光,则cookie只在浏览器关闭前有效,cookie会在做事器端和客户端传输,但是不会保存在客户机的磁盘上,打开新的浏览器将不能得到原来创建的cookie信息。

Cookie信息保存在本地时会保存到当前登任命户专门目录下,保存的cookie文件名中会包含创建cookie所在页面网站的域名,当浏览器再次连接该网站时,会从本机cookie存放目录下选出该网站的有效cookie,将保存在个中的信息附加在HTTP头中发送到做事器端,做事器端程序就可根据上次保存在cookie的信息为访问客户供应“影象”或个性化做事。

Cookie除了可以在做事器端创建外,也可以在客户真个浏览器中用客户端脚本(如javascript)创建。
客户端创建的cookie的性子和做事器端创建的cookie一样,可以保存在本地,也可以被传送到做事器端被做事器程序读取。

Cookie 根本知识

cookie 是有大小限定的,大多数浏览器支持最大为 4096 字节的 Cookie(具体会有所差异,可以利用这个好用的工具:http://browsercookielimits.squawky.net/ 进行测试);如果 cookie 字符串的长度超过最大限定,则该属性将返回空字符串。
由于 cookie 终极都因此文件形式存放在客户端打算机中,以是查看和修正 cookie 都是很方便的,这便是为什么常说 cookie 不能存放主要信息的缘故原由。
每个 cookie 的格式都是这样的:cookieName = Vaue;名称和值都必须是合法的标示符。
cookie 是存在 有效期的。
在默认情形下,一个 cookie 的生命周期便是在浏览器关闭的时候结束。
如果想要 cookie 能在浏览器关掉之后还可以利用,就必须要为该 cookie 设置有效期,也便是 cookie 的失落效日期。
alert(typeof document.cookie)结果是 string.cookie 有域和路径这个观点。
域便是domain的观点,由于浏览器是个把稳安全的环境,以是不同地域之间是不能相互访问 cookie 的(当然可以通过分外设置的达到 cookie 跨域访问)。
路径便是routing的观点,一个网页所创建的 cookie 只能被与这个网页在同一目录或子目录下得所有网页访问,而不能被其他目录下得网页访问(这句话有点绕,一会看个例子就好理解了)。
实在创建cookie的办法和定义变量的办法有些相似,都须要利用 cookie 名称和 cookie 值。
同个网站可以创建多个 cookie ,而多个 cookie 可以存放在同一个cookie 文件中。
cookie 存在两种类型:①:你浏览确当前网站本身设置的 cookie ②来清闲网页上嵌入广告或图片等其他域来源的 第三方 cookie (网站可通过利用这些 cookie 跟踪你的利用信息)cookie 有两种打消办法:①:通过浏览器工具打消 cookie (有第三方的工具,浏览器自身也有这种功能) ②通过设置 cookie 的有效期来打消 cookie.注:删除 cookie 有时可能导致某些网页无法正常运行。
浏览器可以通过设置来接管和谢绝访问 cookie。
出于功能和性能的缘故原由考虑,建议只管即便降落 cookie 的利用数量,并且要只管即便利用小 cookie。

Cookie的利用

从cookie的定义可以看到,cookie一样平常用于采取HTTP作为进行信息交流协议的客户端和做事器端用于记录须要持久化的信息。
一样平常是由做事器端创建要记录的信息,然后通报到客户端,由客户端从HTTP中取出信息,保存在本机磁盘上。
当客户端再次访问做事器端时,从本机磁盘上读出原来保存的信息,附加到HTTP中发送给做事器端,做事器端从HTTP中读取信息,根据实际运用的需求进行进一步的处理。

做事器端cookie的创建和再次读取功能常日由做事器端编程措辞实现,客户端cookie的保存、读取一样平常由浏览器来供应,并且对cookie的安全性方面可以进行设置,如是否可以在本机保存cookie。

由于cookie信息以明文办法保存在文本文件中,对一些敏感信息如口令、银行帐号如果要保存在本地cookie文件中,最好采取加密形式。

与cookie类似的另一个观点是会话(Session),会话一样平常是记录客户端和做事器端从客户端浏览器连接上做事器端到关闭浏览器期间的持久信息。
会话一样平常保存在内存中,不保存到磁盘上。
会话可以通过cookie机制来实现,对付不支持cookie的客户端,会话可以采取URL重写办法来实现。
可以将会话理解为内存中的cookie。

利用会话会对系统伸缩性造成负面影响,当做事器端要在很多台做事器上同步复制会话工具时,系统性能会受到较大侵害,尤其会话工具较大时。
这种情形下可以采取cookie,将须要记录的信息保存在客户端,每次要求时发送到做事器端,做事器端不保留状态信息,避免在做事器端多台机器上复制会话而造成的性能低落。

Cookie 基本操作

对付 Cookie 得常用操作有,存取,读取,以及设置有效期;详细可以参照 JavaScript 操作 Cookie 一文;但,近期在前端编码方面,皆以Vue为冲锋利器,以是就有用到一款插件 vue-cookie,其代码仅30行,堪称精妙,读取操作如下:

set: function (name, value, days) {

var d = new Date;

d.setTime(d.getTime() + 2460601000days);

window.document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString();

},

get: function (name) {

var v = window.document.cookie.match('(^|;) ?' + name + '=([^;])(;|$)');

return v ? v[2] : null;

},

delete: function (name) {

this.set(name, '', -1);

}

cookie 域观点

路径能办理在同一个域下访问 cookie 的问题,咱们接着说 cookie 实现同域之间访问的问题。
语法如下:

document.cookie = “name=value;path=path;domain=domain“

赤色的domain便是设置的 cookie 域的值。
例如 “www.qq.com” 与 “sports.qq.com” 公用一个关联的域名”qq.com”,我们如果想让”sports.qq.com” 下的cookie被 “www.qq.com” 访问,我们就须要用到cookie 的domain属性,并且须要把path属性设置为 “/“。
例:

document.cookie = “username=Darren;path=/;domain=qq.com“

注:一定的是同域之间的访问,不能把domain的值设置成非主域的域名。

cookie 安全性

常日 cookie 信息都是利用HTTP连接通报数据,这种通报办法很随意马虎被查看,在掌握台下运行document.cookie,一览无余;以是 cookie 存储的信息随意马虎被盗取。
如果 cookie 中所通报的内容比较主要,那么就哀求利用加密的数据传输。
以是 cookie 的这个属性的名称是“secure”,默认的值为空。
如果一个 cookie 的属性为secure,那么它与做事器之间就通过HTTPS或者其它安全协议通报数据。
语法如下:

document.cookie = “username=Darren;secure”

把cookie设置为secure,只担保 cookie 与做事器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。
如果想让本地cookie也加密,得自己加密数据。

注: 就算设置了secure 属性也并不代表他人不能看到你机器本地保存的 cookie 信息,以是说到底,别把主要信息放cookie就对了。

Session详解

Session即回话,指一种持续性的、双向的连接。
Session与Cookie在实质上没有差异,都是针对HTTP协议的局限性而提出的一种保持客户端和做事器间保持会话连接状态的机制。
Session也是一个通用的标准,但在不同的措辞中实现有所不同。
针对Web网站来说,Session指用户在浏览某个网站时,从进入网站到浏览器关闭这段韶光内的会话。
由此可知,Session实际上是一个特定的韶光观点。

利用Session可以在网站的高下文不同页面间通报变量、用户身份认证、程序状态记录等。
常见的形式便是合营Cookie利用,实现保存用户登录状态功能。
和Cookie一样,session_start() 必须在程序最开始实行,前面不能有任何输出内容,否则会涌现警告。
PHP的Session默认通过文件的办法实现,即存储在做事器真个Session文件,每个Session一个文件。

Session通过一个称为PHPSESSID的Cookie和做事器联系。
Session是通过sessionID判断客户端用户的,即Session文件的文件名。
sessionID实际上是在客户端和做事端之间通过HTTP Request 和 HTTP Response传来传去。
sessionID按照一定的算法天生,必须包含在 HTTP Request 里面,担保唯一性和随机性,以确保Session的安全。
如果没有设置 Session 的天生周期, sessionID存储在内存中,关闭浏览器后该ID自动注销;重新要求该页面,会重新注册一个sessionID。
如果客户端没有禁用Cookie,Cookie在启动Session回话的时候扮演的是存储sessionID 和 Session 生存期的角色。
Session过期后,PHP会对其进行回收。

假设客户端禁用Cookie,可以通过URL或者隐蔽表单通报sessionID;php.ini中把session.use_trans_sid 设成1,那么连接后就会自己加Session的ID。

Session以文件的形式存放在本地硬盘的一个目录中,当比较多时,磁盘读取文件就会比较慢,因此把Session分目录存放。

对付访问量大的站点,用默认的Session存储办法并不适宜,较优的方法是用Data Base存取Session。
在大流量的网站中,Session入库存在效率不高、霸占数据库connection资源等问题。
针对这种情形,可以利用Memcached、Redis等Key-Value数据存储方案实现高并发、大流量的Session存储。

session与cookie的差异:

1,session 在做事器端,cookie 在客户端(浏览器)

2,session 存在在做事器的一个文件里(默认),不是内存

3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也便是说,如果 浏览器禁用了 cookie ,同时 session 也会失落效(当然也可以在 url 中通报)

4,session 可以放在 文件,数据库,或内存中都可以。

5,用户验证这种场合一样平常会用 session

因此,坚持一个会话的核心便是客户真个唯一标识,即 session id

更为详尽的说法:

由于HTTP协议是无状态的协议,以是做事端须要记录用户的状态时,就须要用某种机制来识详细的用户,这个机制便是Session.范例的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,以是并不知道是哪个用户操作的,以是做事端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。
这个Session是保存在做事真个,有一个唯一标识。
在做事端保存Session的方法很多,内存、数据库、文件都有。
集群的时候也要考虑Session的转移,在大型的网站,一样平常会有专门的Session做事器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,利用一些缓存做事比如Memcached之类的来放 Session。
思考一下做事端如何识别特定的客户?这个时候Cookie就登场了。
每次HTTP要求的时候,客户端都会发送相应的Cookie信息到做事端。
实际上大多数的运用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,做事端会在HTTP协议中见告客户端,须要在 Cookie 里面记录一个Session ID,往后每次要求把这个会话ID发送到做事器,我就知道你是谁了。
有人问,如果客户真个浏览器禁用了 Cookie 怎么办?一样平常这种情形下,会利用一种叫做URL重写的技能来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,做事端据此来识别用户。
Cookie实在还可以用在一些方便用户的场景下,设想你某次上岸过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。
这也是Cookie名称的由来,给用户的一点甜头。

以是,总结一下:

Session是在做事端保存的一个数据构造,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种办法。

Cookie与Session问答

Cookie运行在客户端,Session运行在做事端,对吗?A:不完备精确。
Cookie是运行在客户端,有客户端进行管理;Session虽然是运行在做事器端,但是sessionID作为一个Cookie是存储在客户真个。
浏览器禁止Cookie,Cookie就不能用了,但Session不会受浏览器影响,对吗?A:错。
浏览器禁止Cookie,Cookie确实不能用了,Session会受浏览器真个影响。
很大略的实验,在登录一个网站后,清空浏览器的Cookie和隐私数据,单机后台的连接,就会由于丢失Cookie而退出。
当然,有办法通过URL通报Session。
浏览器关闭后,Cookie和Session都消逝了,对吗?A:错。
存储在内存中额Cookie确实会随着浏览器的关闭而消逝,但存储在硬盘上的不会。
更执拗的是Flash Cookie,不过现在很多系统优化软件和新版浏览器都已经支持删除Flash Cookie。
百度采取了这样的技能影象用户:Session在浏览器关闭后也不会消逝,除非正常退出,代码中利用了显示的unset删除Session。
否则Session可能被回收,也有可能永久残留在系统中。
Session 比 Cookie 更安全吗? 不应该大量利用Cookie吗?A:缺点。
Cookie确实可能存在一些不屈安成分,但和JavaScript一样,纵然打破前端验证,还有后端保障安全。
统统都还要看设计,尤其是涉及提权的时候,特殊须要把稳。
常日情形下,Cookie和Session是绑定的,得到Cookie就相称于得到了Session,客户端把挟制的Cookie原封不动地传给做事器,做事器收到后,原封不动地验证Session,若Session存在,就实现了Cookie和Session的绑定过程。
因此,不存在Session比Cookie更安全这种说法。
如果说不屈安,也是由于代码不屈安,缺点地把用作身份验证的Cookie作为权限验证来利用。
Session是创建在做事器上的,该当少用Session而多用Cookie,对吗?A:错。
Cookie可以提高用户体验,但会加大网络之间的数据传输量,应只管即便在Cookie中仅保存必要的数据。
如果把别人机器上的Cookie文件复制到我的电脑上(假设利用相同的浏览器),是不是能够登录别人的帐号呢?如何戒备?A:是的。
这属于Cookie挟制的一种做法。
要避免这种情形,须要在Cookie中针对IP、UA等加上分外的校验信息,然后和做事器端进行比对。
在IE浏览器下登录某网站,换成Firefox浏览器是否仍旧是未登录状态?利用IE登录了腾讯网站后,为什么利用Firefox能保持登录状态?A:不同浏览器利用不同的Cookie管理机制,无法实现公用Cookie。
如果利用IE登录腾讯网站,利用Firefox也能登录,这是由于在安装腾讯QQ软件时,你的电脑上同时安装了针对这两个浏览器的插件,可以识别本地已登录QQ号码进而自动登录。
实质上,不属于共用Cookie的范畴。

__EOF__

标签:

相关文章

phptp断定标签技巧_php面试题2020

分类专栏: PHP展开一 、PHP根本部分 1、PHP措辞的一大上风是跨平台,什么是跨平台?PHP的运行环境最优搭配为Apache...

SEO优化 2024-12-12 阅读0 评论0