目录
回复内容:
cookie
session
首页 后端开发 php教程 是不是现在的网站都用session了?不用了cookie了?

是不是现在的网站都用session了?不用了cookie了?

Jun 06, 2016 pm 08:18 PM
php

是吗 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

热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.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

我后悔之前不知道的 7 个 PHP 函数 我后悔之前不知道的 7 个 PHP 函数 Nov 13, 2024 am 09:42 AM

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

php程序在字符串中计数元音 php程序在字符串中计数元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? 什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

See all articles