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

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

Sep 11, 2019 am 11:25 AM
cookie php session

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

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 は、

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

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

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

母音を文字列にカウントする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元があります

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.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

See all articles