検索
ホームページバックエンド開発PHPチュートリアルPHP ではセッションと Cookie について言及する必要があります

PHP ではセッションと Cookie について言及する必要があります

#セッションと Cookie とは何ですか?

セッションと Cookie はセッション制御テクノロジに属します。 ID 認識、ログイン認証、データ送信などによく使用されます。たとえば、スーパーマーケットに買い物に行くとき、割引を受けるには会員カードを出さなければなりません。このとき、この会員カードが本物で有効であることをどのようにして確認するのでしょうか。レジ係に会員番号を伝えると、レジ係は提示した会員番号に基づいてシステムに会員番号を入力し、システムが会員番号に基づいて問い合わせを行い、会員番号が見つかった場合には、その会員番号が本物であることが証明されます。ここでの会員番号は Cookie とセッションのようなものです。会員システムはサーバー、レジ係はクライアントに相当します。

なぜセッションや Cookie が使用されるのですか?

上記の例に基づいて、セッションと Cookie で何ができるかはわかっていますが、それを実現するためになぜこれを使用する必要があるのでしょうか?ここで、http アプリケーション転送プロトコルの特性を理解する必要があります。 http プロトコルはステートレスであるため、ブラウザは Web ページを要求します (これは http リクエストです。サーバーはその要求を受信すると、クライアントが必要とするデータを返します。このプロセス中に、ブラウザとサーバーは接続を確立します)つながったもの。ただし、サーバーがデータを返し、クライアントがデータを受信すると、両者の接続関係は切断されます。次回ブラウザがリクエストを送信すると、接続が再確立され、これら 2 つのリンクは相互に関係がありません。想像してみてください。ショッピング モールのシステムにログインするとき、ホームページにアクセスしてログイン操作を行いますが、注文したり、ショッピング カートに追加したりするときには、引き続きログインする必要があります。科学的に言えば、商品をショッピングカートに追加した後にクリックして注文する場合、注文ページにログインする必要があり、注文ページにログインする必要はありません。

Http 機能

1. http プロトコルはクライアント/サーバー モードをサポートしており、リクエスト/レスポンス モードでもあります。プロトコル。

2.接続がありません。いわゆるコネクションレスとは、サーバーがクライアントのリクエストを受信し、応答を完了し、クライアントの応答を受信した後、接続を切断することを意味します。各接続は 1 つのリクエストのみを処理するように制限します。これにより、送信時間が節約されます。

3. ステートレス。 http プロトコルにはトランザクション処理のためのメモリ機能がありません。つまり、以前の情報が必要な場合は再送信するしかなく、データ送信量が増加します。この方法はサーバーをある程度解放しますが、クライアントとサーバー間の接続には役立ちません。この欠点を補うために、http の状態を記録する Cookie とセッションという 2 つの技術が開発されました。

4. シンプルかつ高速: いわゆるシンプルかつ高速とは、クライアントがサーバーにサービスを要求するときに、一般的に言えば、リクエスト メソッドとアクセスするためのパスを送信するだけでよいことを意味します。 #5. 柔軟性: これは主に、クライアントが http プロトコルを通じてあらゆる種類のデータを送信できることを意味します。たとえば、.jpg ファイル、.ppt ファイルなどを転送する場合、転送するコンテンツ タイプを設定するだけで済みます。

Cookie

cookie の基本概念

Cookie は、リモート ブラウザがユーザーを追跡し、ユーザーを識別するためのデータを保存するためのメカニズムです。たとえば、Cookie はクライアントに保存されるデータの一部です。

Cookie の動作原理と保存メカニズム

#. 動作原理

#1. クライアントはサーバーへの http リクエストを開始します。

2. サーバーは Cookie の作成指示を設定し、クライアントに応答します。

#3. クライアントはサーバーからの指示を受け取り、その指示に従ってクライアント上で Cookie を作成します。

4. 次のリクエストをブロックする場合、クライアントはこの Cookie を保持し、サーバーにリクエストを送信します。クライアント側 ストレージには 3 つの形式があります。ブラウザごとにストレージ メカニズムと Cookie が異なります。

1. ファイル ストレージ。ブラウザは、異なるドメインのディスク上の対応するディレクトリに別のファイルを作成し、ドメインの下に Cookie 値を保存します。この Cookie はブラウザを閉じると消えます。以下の作成構文によると、この状況は有効期限を設定しない場合に発生します。

3.フラッシュ ストレージ。この保存方法はディスクに永続的に保存されます。ブラウザで一部のデータを削除しても、この保存方法に保存された Cookie は削除できません。削除する必要がある場合は、ディスクを使用してください。

Cookie 設定

Bool setcookie(string $name[, string $values, $expire=0[,string $path[,string $domain[, bool $secure = false[, bool $httpOnly = false]]]]] );

$name: Cookie に保存される名前、必須オプション

$values: Cookie に保存される値。ここで注意する必要があるのは、値が false に設定されている場合、クライアントは Cookie 値を削除しようとするため、値が true または false の場合は、代わりに別の値を使用します。たとえば、true の場合は 1 を使用します。 、 false は 0.

に置き換えられます。

$expire:cookie的过期时间,秒为单位,当该值被设置时,定时删除;当该值没有设置时,该值是永久有效的.该值设置为小于当前时间时,会出发浏览器的删除机制,会自动删除cookie.

$path:cookie有效的目录,默认的目录是"/",即表示当前的正个域名都生效.

$domain:cookie的作用域名,默认的是当前域名有效,如果需要设置直接填写生效的域名即可.需要注意的是IE浏览器有长度限制,当只有大于5的时候才会生效.

$secure:cookie的加密处理,当设置为true的时候,需要使用HTTPS协议,才会生效.

$httpOnly:决定cookie是否只使用http协议,当设置为1或者true,其他非http协议是无法操作cookie的。例如我们未设置的时候,我们JavaScript是可以对cookie进行设置的.这样一定程度上保证了安全性.这种情况需考虑浏览器是否支持该配置项.

. 设置 cookie 的函数还有 setrawcookie () 函数,只不过该函数不会对值 进行 urlencode 序列号.

. 有时候,我们可能遇到这种情况,我们在这个页面设置了 cookie,但是去刷新页面获取 cookie,按理说是会获取到 cookie 的,但实际情况是无法获取到,这是由于 cookie 运行机制导致,PHP 创建了 cookie 这个指令,告诉浏览器,你需要执行这个指令了,这时候浏览器才会去执行这个指令,因此是无法获取到 cookie 的.

. 在设置 cookie 之前,不能有任何输出.

// 实现方式一
setcookie($cookie,"hello,world!", 3600);
// 实现方式二
header("header("Set-Cookie: testcookie=中文; path=/; domain=.sunphp.org; expires=".gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT",time()+9600));");
// 两则的作用是一样的,setcookie是PHP内置函数,是对http协议的操作封装。

 cookie 的获取

$_COOKIE['$cookeName'];

 cookie 的应用

. 用户身份识别

. 数据传输

. 登录控制 (是否登录、单点登录)

 cookie 跨域设置

我们都知道,在前端开发中时常会遇到 ajax 跨域问题,我们解决的方式有很多种,可以参考这篇文章传送门 1,传送门 2,cookie 跨域我们可以参考 p3p 传输协议传送门

 cookie 使用的注意事项

. 数量限制,客户端对每一个 domian 下的 cookie 是有数量限制的,不是创建任意数量就行.

. 安全性,根据上面的创建语法,我们可以得知,当我们未设置 $httpOnly 值得时候,非 http 协议是可以操作 cookie 的值的,例如 JavaScript 通过 cookie ($cookieName). 而且一些抓包工具也是可以抓取到 cookie 的,还有就是 cookie 存储在客户端的文件中,如果获取到这个 cookie,也是可以对 cookie 做一些操作的。为了防止别人可以拷贝 cookie 文件,进行恶意操作,可以对 cookie 进行加密处理.

数据传输:当 cookie 数量很多,数据很大的时候,其实对于带宽是有消耗的。比较 http 传输都需要带宽,当 http 传输的数据量大了,带了的带宽消耗就大.

 Session

 运行原理与存储机制

. 运行原理

1. 客户端向服务端发起请求,建立通信

2. 服务端根据设置的 session 创建指令,在服务端创建一个编号为 sessionid 的文件,里面的值就是 session 具体的值 (组成部分 变量名 | 类型 : 长度:值).

3. 服务端将创建好的 sessionid 编号响应给客户端,客户则将该编号存在 cookie 中 (一般我们在浏览器存储的调试栏中会发现 cookie 中有一个 PHPSESSID 的键,这就是 sessionid,当然这个名称,我可以通过设置服务端是可以改变的).

. 当下一次请求时,客户端将这个 sessionid 携带在请求中,发送给服务端,服务端根据这个 sessionid 来做一些业务判断.

. 存储机制

1. 存储方式.session 默认是文件存储的。我们可以通过 php.ini 的配置来设置存储驱动传送门

2. 生命周期。当我们未设置 session 的生命周期时,当浏览器关闭之后存储在客户端的 phpsessid 自动消失,因为它是存在内存,下次建立连接的时候会重新创建一个 phpsessid. 之前的 session,PHP 会自动的根据垃圾回收机制自动删除。这里我们可以根据 session_set_cookie_params ($expire) 函数来设置一个生命周期;

 session 的设置

session_start();
$_SESSION = $values;

. session_start () 设置之前,不能有任何输出

 session 的获取

$_SESSION['values'];

 session 的删除

// 只是单纯的给重新赋了一个空的值
$_SESSION['values'] = '';
// 该函数是清空所有的session,慎用!
session_destroy();
// 连values这个session键都会删除
unset($_SESSION['values']);

 session 的使用场景

. 用户身份识别

. 数据传输

. 登录控制 (是否登录、单点登录)

 session 的注意事项

. 安全性,sessionid 是按照一定的算法生成,要保证 session 的值唯一性和随机性.

. クライアントは Cookie を無効にします。上記のセッションの動作原理によれば、セッションの保存と送信は依然としてクライアントに依存していると結論付けることができます。したがって、クライアントが Cookie を無効にすると、クライアントはPHPSESSID. このとき、URL 書き換えを渡すか、フォームを使用してセッション送信を実現します。

. ストレージの最適化、上記のセッション作成に従って、すべてのセッションはディレクトリに作成され、一部の無効なセッションが作成されますガベージ コレクション メカニズムの時間内に削除されません。削除されます。サーバーが多数のサイトで構成されている場合、この時点で多くのセッション ファイルが生成され、読み取り速度が遅くなります。ストレージ ディレクトリのレベルを設定できます。 session 関数と save_path 関数。一般に、大規模なプロジェクト (分散プロジェクトなど) では、データ ストレージやメモリ ストレージなどの他のストレージ方法を使用できます。

session と cookie の違い

.セッションはサーバー側に保存され、cookie はクライアント側に保存されます。

.cookie の作成命令はサーバーによって設定されます。

.session の sessionid は次のとおりです。

# Cookie とセッションの間のいくつかの誤解

. クライアントが Cookie を禁止しているため、セッションは使用できませんか?

URL 書き換えまたはフォーム送信を使用すると、これを実現できます。

. セッションと Cookie のセキュリティを比較すると、クライアント側ではセッションの方が安全ですか?

Cookie はクライアント側に存在するため、セキュリティは比較的低いですが、作成時に $httpOnly の値を設定することができます。 Cookieがある程度セッションを取得しているので、セッションを操作することもできます。

. ブラウザを閉じるとCookieやセッションは消えてしまいますか?

これには、ストレージ メカニズムを確認する必要があります。 Cookie はファイル、メモリ、フラッシュに保存できます。もちろん、メモリに保存されている場合は、ブラウザを閉じると消えます。ガベージ コレクションのメカニズムにより、セッションはガベージにあるときに削除されません。

.Cookie はクライアントに保存されますが、そのセキュリティを強化するにはどうすればよいですか?

Cookieを設定する際に、クライアント情報IPやブラウザ情報などの特殊なパラメータを追加することができますが、サーバーからファイルを取得しても動作可能でしょうか?

Cookie 管理メカニズムがブラウザ間で同じかどうかによって異なります。

関連する推奨事項: 「

PHP チュートリアル

以上がPHP ではセッションと Cookie について言及する必要がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はlearnkuで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP:多くのウェブサイトの基礎PHP:多くのウェブサイトの基礎Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター