目次
回复内容:
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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) 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。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles