この記事では主にPHPの会話機構であるCookieとセッションについて説明します。
Cookie の概要
Cookie はクライアントのブラウザに保存されるデータであり、当社は Cookie を使用してユーザー データを追跡および保存します。通常、Cookie は HTTP ヘッダーを介してサーバーからクライアントに返されます。ほとんどの Web プログラムは Cookie の操作をサポートしていますが、Cookie は HTTP ヘッダーに存在するため、ヘッダー関数の使用制限と同様に、他の情報を出力する前に設定する必要があります。
PHP は setcookie 関数を通じて Cookie を設定します。ブラウザから返された Cookie はすべて、PHP によって $_COOKIE のグローバル変数に自動的に保存されるため、$_COOKIE['key' ] を使用して Cookie を読み取ることができます。価値。
PHP の Cookie は非常に広く使用されており、ユーザーのログイン情報やショッピング カートなどの保存によく使用されます。セッションを使用する場合、通常、Cookie はユーザーを識別するためのセッション ID を保存するために使用されます。有効期間が過ぎると、Cookie はクライアントから自動的に削除されます。同時に、セキュリティ制御のために、Cookie にはドメインとパスを設定することもできますが、それらについては後の章で詳しく説明します。
Web サイトのセキュリティのため、当サイトでは当面 Cookie 変数の表示機能を提供しておりません。ローカルでテストしてください。
Cookie を設定してください
PHP Cookie を設定する最も一般的な方法は、setcookie 関数を使用することです。Setcookie には 7 つのオプションのパラメータがあります。一般的に使用する最初の 5 つは次のとおりです:
name (Cookie 名) には、$_COOKIE[ を通じてアクセスできます。 'name']
value (Cookie 値)
expire (有効期限) Unix タイムスタンプ形式、デフォルトは 0 で、ブラウザを閉じると有効期限が切れることを意味します
path (有効なパス) if パスが「/」に設定されている場合、Web サイト全体が有効です
domain (有効なドメイン) デフォルトでは、ドメイン名全体が有効です。 ' が設定されている場合、www サブドメインでのみ有効です
$value = 'test'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); //有效期一小时 setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //设置路径与域
PHP で Cookie を設定する関数 setrawcookie もあります。Setrawcookie は基本的に setcookie と同じです。唯一の違いは、値が自動的に設定されないことです。 urlencode されているため、必要に応じて urlencode を手動で実行する必要があります。
setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365);
Cookie は HTTP ヘッダーを通じて設定されるため、ヘッダー メソッドを使用して直接設定することもできます。
header("Set-Cookie:cookie_name=value");
Cookie の削除と有効期限
これまでの章で Cookie を設定する機能について学習しましたが、Cookie を削除する機能がないことがわかりました。 PHP で Cookie を削除するには、setcookie 関数を使用します。
setcookie('test', '', time()-1);
Cookie の有効期限が現在時刻より前に設定されている場合、Cookie は自動的に期限切れになり、Cookie を削除する目的が達成されることがわかります。この設計の理由は、Cookie が HTTP ヘッダーを介して渡されるためです。クライアントは、サーバーから返された Set-Cookie セグメントに基づいて Cookie を設定します。Cookie を削除するために新しい Del-Cookie を使用する必要がある場合、HTTP ヘッダーが複雑になります。実際、Cookie の設定、更新、削除は Set-Cookie を通じて簡単かつ明確に行うことができます。
原理を理解した後は、ヘッダーから直接 Cookie を削除することもできます。ここでは、
header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));
gmdate を使用してグリニッジ標準時を生成し、時差の影響を排除しています。
セッションと Cookie の類似点と相違点
Cookie はクライアントにデータを保存し、ユーザーとサーバー間の接続を確立します。通常は多くの問題を解決できますが、Cookie はクライアントにデータを保存し、ユーザーとサーバー間の接続を確立します。それでもいくつかの制限があります:
Cookie は比較的安全ではなく、簡単に盗まれて Cookie のなりすましにつながる可能性があります
単一の Cookie の値は最大 4k しか保存できません
すべてのリクエストにはネットワーク接続が必要です 送信、占有帯域幅
session は、サイズ制限なしでユーザーのセッション データをサーバー側に保存し、session_id を通じてユーザーを識別します。デフォルトでは、PHP セッション ID は次のとおりです。 Cookie を介して保存されるため、Seesion はある程度まで Cookie に依存しています。ただし、これは絶対的なものではなく、セッション ID はパラメータを通じて実装することもでき、識別のためにセッション ID をサーバーに渡すことができる限り、セッションを使用できます。
セッションの使用
PHP でセッションを使用するのは非常に簡単です。最初に session_start メソッドを実行してセッションを開き、次にグローバル変数 $ を介してセッションの読み取りと書き込みを行います。 _セッション。
session_start(); $_SESSION['test'] = time(); var_dump($_SESSION);
session は、設定される値を自動的にエンコードおよびデコードするため、セッションはデータやオブジェクトを含むあらゆるデータ型をサポートできます。
session_start(); $_SESSION['ary'] = array('name' => 'jobs'); $_SESSION['obj'] = new stdClass(); var_dump($_SESSION);
デフォルトでは、セッションはファイルの形式でサーバーに保存されます。したがって、ページ上でセッションが開かれると、セッション ファイルが排他的に占有されます。これにより、現在のページへの他の同時アクセスが発生します。ユーザーは実行できず待機することになります。
セッションの削除と破棄
セッション値を削除するには、PHP の unset 関数を使用できます。削除後は、グローバル変数 $_SESSION から削除されるため、セッション値を削除することはできません。アクセスされる。
session_start(); $_SESSION['name'] = 'jobs'; unset($_SESSION['name']); echo $_SESSION['name']; //提示name不存在
すべてのセッションを削除したい場合は、session_destroy 関数を使用して現在のセッションを破棄できます。session_destroy はすべてのデータを削除しますが、session_id はまだ存在します。
session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); session_destroy();
值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数。
session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); unset($_SESSION); session_destroy(); var_dump($_SESSION); //此时已为空
如果需要同时销毁cookie中的session_id,通常在用户退出的时候可能会用到,则还需要显式的调用setcookie方法删除session_id的cookie值。
使用session来存储用户的登录信息
session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等。
用户在登录成功以后,通常可以将用户的信息存储在session中,一般的会单独的将一些重要的字段单独存储,然后所有的用户信息独立存储。
$_SESSION['uid'] = $userinfo['uid']; $_SESSION['userinfo'] = $userinfo;
一般来说,登录信息既可以存储在sessioin中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,cookie需要进行格式化与加密存储,而session存储在服务端则安全性较高。
以上がPHPセッションテクノロジーには主に何が含まれていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。