欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php中,cookie和session的区别,使用的好处是什么?(求各位大牛解答,不要百度的,谢谢)?

程序员文章站 2022-05-10 19:14:38
...

回复内容:

先不说Php里的session和cookie,我们来看看在正常的web中,session和cookie分别是什么。

Cookie其实是浏览器一端的技术。由于HTTP本身是无状态的,常规来说对于服务器端并不知道每次请求的分别是谁,于是一个web会话允许在HTTP头里通过set-cookie临时存储一些内容在客户端,客户端则需要在此会话中的每一个HTTP请求都附上当前cookie的内容(禁用cookie的话就不发了)。这里的会话一般是以域名来界定的。

但是cookie有两个很大的缺陷:1. cookie是存储在客户端的,所以cookie可以被读取、挪用和修改。这意味着,对于任何关键信息,例如登陆信息等,如果用cookie来保持,别人就能够随意读取删改。2. 其它伪装站点可能可以直接获取到你的cookie内容。

那么怎么样存取这些信息来使得用户端难以随意删改cookie伪装其它用户呢?通常来说有两大类方法:1. 对cookie进行加密;2.cookie里只存一个带自验证的特征码,然后把关键数据存储在服务器一端。这就是session了。

session是cookie的应用。加密存储在客户端的session是最容易实现的,不会给服务器带来额外的存储负担,很多的新型小微框架的session都是以此手段实现的(而并未存储在服务端)。其次就是存储在服务端,可选的存储的地方包括而不限于内存、文件、外部数据库等。

Php自带库里,cookie即往response里加入需要客户端存储等cookie,session则是在cookie里加一条session_id,然后默认以文件的形式将需要存储的东西存储在服务端。

顺带一提,现代浏览器里普遍都支持localStorage,一来它通过前端访问而后端不可取得,对用户而言安全性稍好,二来可以存储的量大多了,三来有一定的防低端爬虫的能力。如果不用考虑老旧浏览器兼容的话,用localStorage+前后端分离,以ajax形式通过js回报localStorage内容(session_id或者加密存储内容)以代替cookie更值得推荐。 cookie就是把数据存在客户端
session就是把数据存在服务器端,客户端只存一个id 一楼说的很好了。
其实最大的区别就是cookie存在客户端,session存在服务器端。而且一般情况下,session确实依赖cookie里面的session id,其实这个session id你也可以自己定,然后用session时指定这个session id。session id的作用就是指定session存放的文件,所以cookie禁用后,可以用这招。
再补充一点就是,在分布式架构中session要慎用,因为可能会出现session数据丢失的情况,当然你也可以重写session,让session存在缓存中或者数据库中。 你可以这么理解,cookie是别人家的箱子,session是自己家的箱子,箱子的好处是什么?存东西呗