搜索
首页后端开发php教程是不是现在的网站都用session了?不用了cookie了?

是吗 cookie没用了吗

回复内容:

是吗 cookie没用了吗

似乎没人说到重点。

简单来说,session在服务器端存储链接链接状态/数据的,cookie是在浏览器端记录链接状态/数据的。

HTTP协议是无状态的,就是说一个浏览器请求网页,接收完网页之后浏览器断开与服务器的链接,服务器不会再记住这个链接的,当浏览器再发送请求的时候服务器总是把这个请求当作新的请求,服务器不知道这个浏览器以前发送过什么东西。比如用户登录这个问题,当浏览器发送用户名密码登录成功之后,会断开与服务器的链接,那么再发送请求的时候就服务器其实是不知道这个浏览器登录过了。

所以为了解决这个问题,服务器就在 HTTP 头里加入了一个cookie,浏览器收到之后就会存储起来。浏览器每次发送请求的时候都会把这个cookie顺带发送给服务器,那么服务器就可以通过浏览器发送过来的 cookie 知道这个浏览器以前发送过什么请求(如果服务器记录过得话)。说到登录就是,浏览器发送 POST 请求登录之后,服务器返回一个登录成功,并且包含了随机生成的唯一cookie,那么浏览器以后的请求都会发送这个cookie,服务器读取这个cookie,那么服务器就知道以前这个用户登录过了。当然cookie也可以用来在浏览器端存储数据,在浏览器端js是可以读取cookie的,所以可以存储一些数据,等用户下次访问网页的时候就可以读取,比如,某些网页的游戏的你曾经获得的最高分,甚至是用户名和密码(不过HTML5支持其他的方式,存到cookie里的越来越少了),发送到服务器端,服务器不理会就是了。

刚才说道登录的时候,用户登录之后服务器会分配一个唯一的 cookie,那么服务器当然也需要存储这个cookie,另外为了记录这个浏览器以前做过什么,那么也必须记录在这个cookie下发送过的一些请求,比如用户登录之前的页面是某个页面下,登录后需要给人家跳转回去呀(就是一些用户曾经发送的请求,但有没有必要写入到数据库里的临时数据)。PHP,Java等通过这个唯一的cookie(不一定是cookie,下面解释)访问这些数据"接口"叫做session。基本上就是声明某些页面使用session,然后你在这些session里面存储数据,PHP等会自动帮你生成唯一的cookie和存储这个cookie对应的数据,而这些数据是不发送给浏览器端的。你不需要知道这个唯一的cookie是什么和对应的数据存储在哪里,PHP等服务器自动帮你处理这这些操作。所以说,其实session就相当于PHP等帮你实现了一个数据库,存储这个cookie及其对应的数据,只不过这些数据都是临时的,不需要像数据库那样的永久保存。(如果你想把这些数据存储在cookie里也是可以的,不过如果存储的数据太多的话也是浪费带宽什么的,而这样的实现的话每次多发送的数据只是这个唯一的cookie,另外每次都发送这些数据的话毕竟也不太安全。cookie可以在浏览器端伪造,所以所有重要数据都要加密存储在cookie里,但是如果使用唯一的密钥又怕破解,使用不同的密钥又不方便管理,而且加解密都要浪费计算资源,所以这些数据还是存储在服务器端吧)

刚才说的是,服务器考cookie实现session,其实还有 URL重写的方式实现 session。浏览器每次发送请求,其实还有一个地方可以存储数据,那就是URL,所以上面说道的唯一标识可以到网页中的url中。在网页中的URL的末尾添加这个唯一标识,浏览器发送请求的时候依旧会把这个唯一标识发送过去。比如把http://www.example.com/path/to/file.php变成http://www.example.com/path/to/file.php;PHPSESSIONID=唯一标识。但是这种方式有一个确定,那就是需要在服务器端代码的每一个网页的每一处链接手动的完成这个URL的转换,显然没有使用cookie的方式方便。

session也是靠cookie实现的

cookie可以长期保存一些数据
session则是短期维持会话数据
两者不冲突
大多数session都是用cookie实现的

两者各有用处,不能代替。

一般来说,session只存在于会话期,一旦结束会话就不存在了。就算不结束会话,一般也会在一定时间后被清除,所以只能用来缓存一些不需要持久化的数据。

cookie除了可以存在于会话期,还可以相对长时间的保存数据。比如你要保持登录,就要用cookie。session的session id也是用cookie保存的,不过这是php自己进行的不需要你干预。

cookie存在客户端。客户端可以读取cookie保存内容。
每次发起请求,客户端找出页面的cookie传给服务器。
cookie内容改变一般有两种:

  1. 每次请求时,服务器返回内容,设定cookie。

  2. 客户端的js脚本之类也可以改变cookie

session

基于cookie,用于保存session的id。
session存取都在服务器。客服端不知道session保存内容,但知道sessionID。
每次发起请求,sessionID随着cookie传给服务器。
session内容只能由服务器读取和改变。


保存期限都是有对应设置的,不存在什么这个保存时间长、那个短。(但是有个安全性问题参见下文)
cookie由保存者(服务器或者客户端)指定,每个cookie内容有单独的有效期设定;
session在服务器有设定,有效期是对于整个session来说的。


cookie是可以伪造的,而session保存在服务器无法篡改。session保存内容更安全。
当然你看了上面可能会说:sessionID保存在cookie里,cookie可以伪造,所以可以伪造sessionID啊。
一般来说,伪造一个有效的sessionID还是有难度的。引出的另一个问题伪造session与题干无关不再赘述。


只需要服务端用到、客户端不需要 的数据,推荐用session。不想让客户端知道的敏感数据尤其适用。

需要客户端临时使用,不需要服务器保存 的 数据,推荐用cookie。比如页面统计里跟踪用户行为的临时数据

有些情况下用session或者纯cookie都可以,此时就要结合特点去衡量采用什么。
一般现在采用session比较多,现在网站也不缺那点空间资源

cookie:节省服务器资源,可以长期有效,不安全,适合存不重要的信息。
session:占用服务器资源,一般用户操作期间才有效,安全,适合存重要信息。

session是server端保存会话数据的,一般会画结束就会销毁,所以生命周期很短暂,不可以长期保存数据。
cookie是保存在client端的,可长期保存数据。

  • session 也需要 cookies 技术的支持

  • 不建议直接在 cookies 中存东西,首选 session

session需要用到cookie的呢

cookie肯定会用,例如网站登录后,生成一个key,key除了放缓存外,还会把相关的值保存到cookie,当要验证用户是否登录的时候,直接拿对应cookie的值,再在缓存比较

“网站登录状态保存7天”,这个就要靠COOKIE解决,如果用session,由于seesion是保存在服务端,服务器会有被塞暴内容的风险

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),