ホームページ  >  記事  >  バックエンド開発  >  PHP ではセッションと Cookie について言及する必要があります

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

藏色散人
藏色散人転載
2019-09-11 11:25:552893ブラウズ

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 序列号.

.ac48bac2b8b96521dcd0023c5193ba8e 有时候,我们可能遇到这种情况,我们在这个页面设置了 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.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。