ホームページ  >  記事  >  バックエンド開発  >  PHP インタビューにおけるセッション制御の概要

PHP インタビューにおけるセッション制御の概要

不言
不言転載
2019-02-25 09:34:083935ブラウズ

この記事では、PHP インタビューにおけるセッション制御の概要を紹介します。これには一定の参考価値があります。困っている友人は参考にしてください。お役に立てば幸いです。

1. セッション

PHP セッションはセッションとも呼ばれます。 PHP がセッションを操作する場合、ユーザーがログインするか最初のページにアクセスすると、サーバーはクライアントに SessionID を割り当てます。 SessionID は、セッションのライフサイクル中にクライアントに保存される暗号化された乱数です。これは、ユーザーのマシン上の Cookie に保存することも、URL を介してネットワーク経由で送信することもできます。

ユーザーは、SessionID を介してセッション変数と呼ばれるいくつかの特別な変数を登録でき、これらの変数のデータはサーバー側に保存されます。特定の Web サイト接続では、クライアントが Cookie または URL を通じて SessionID を見つけることができれば、サーバーはクライアントから渡された SessionID に基づいてサーバー側に保存されたセッション変数にアクセスできます。

セッションのライフ サイクルは、特定の Web サイト接続内でのみ有効です。ブラウザを閉じると、セッションは自動的に期限切れになり、以前に登録されたセッション変数は使用できなくなります。具体的な使用手順は次のとおりです。

1) セッションを初期化します。セッション関数を実装する前に、セッションを初期化する必要があります。セッションを初期化するには、session_start() 関数を使用します。

bool session_start(void)

この関数は、セッション ID が存在するかどうかを確認し、存在しない場合はセッション ID を作成し、事前定義された配列 $_SESSION を使用してアクセスできるようにします。セッションが正常に開始された場合、関数は TRUE を返し、それ以外の場合は FALSE を返します。セッションの開始後、セッションに登録されているセッション変数をロードして使用できます。
2) セッション変数を登録します。 PHP 4.1 以降、セッション変数は定義済みの配列 $_SESSION に格納されるため、配列単位を直接定義することでセッション変数を定義できます。形式は次のとおりです:

$_SESSION["键名"]="值";

セッション変数が定義された後、それははサーバーに記録され、この変数の値はセッションが終了するか変数が手動でログアウトされるまで追跡されます。
3) セッション変数にアクセスします。スクリプト内のセッション変数にアクセスするには、まず session_start() 関数を使用してセッションを開始します。その後、$_SESSION 配列を使用して変数にアクセスできます。
4) セッション変数を破棄します。セッション変数を使用した後は、サーバリソースの占有を軽減するために、登録されているセッション変数を削除してください。セッション変数を削除するには、unset() 関数を使用します。構文形式は次のとおりです:

void unset(mixed $var [, mixed $var [, $... ]])

説明: $var は破棄する変数であり、1 つ以上の変数を破棄できます。すべてのセッション変数を一度に破棄するには、session_unset(); を使用します。
5) セッションを破棄します。セッションを使用した後、対応するセッション変数をログアウトし、session_destroy() 関数を呼び出してセッションを破棄します。構文形式は次のとおりです:

bool session_destroy ( void )

この関数は、セッションのすべてのデータを削除します。 SessionID を入力してセッションを閉じます。

2. Cookie

Cookie は、ユーザー名、パスワード、サイトへの訪問回数などの情報を保存するために使用できます。 Web サイトにアクセスすると、Cookie は HTML Web ページから小さな情報をブラウザーに送信し、スクリプトの形式でクライアントのコンピューターに保存します。

一般的に、Cookie は HTTP ヘッダーを通じてサーバーからブラウザに返されます。まず、サーバーは応答で Set Cookie Header を使用して Cookie を作成します。次に、ブラウザは、作成された Cookie を Cookie ヘッダーを通じてリクエストに含めてサーバーに返し、ブラウザの検証を完了します。

Cookie テクノロジーには、次のような多くの制限があります。
1) 複数の人がコンピュータを共有すると、Cookie データが簡単に漏洩します。
2) サイトによって保存される Cookie 情報には制限があります。
3) 一部のブラウザは Cookie をサポートしていません。
4) ユーザーはブラウザのオプションを設定することで Cookie を無効にすることができます。
上記の Cookie の制限があるため、セッション管理を行う場合、SessionID は Cookie だけで保存されるのではなく、Cookie と URL の 2 つの方法で保存されることが一般的です。

具体的には、Cookie を使用する手順は次のとおりです。
1) Cookie を作成します。 PHP で Cookie を作成するには、setcookie() 関数を使用します。構文形式は次のとおりです:

bool setcookie(string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly ]]]]]])

① $name: Cookie の名前を示します。
② $value: Cookie の値を示します。この値はクライアントに保存されるため、機密データは保存しないでください。
③ $expire: Cookie の有効期限が切れる時間を示します。これは UNIX タイムスタンプであり、UNIX エポックからの秒数です。 $expire の設定は通常、現在のタイムスタンプに対応する秒数を加えたものによって決まります。たとえば、time() 1200 は、Cookie が 20 分後に期限切れになることを意味します。設定しない場合、Cookie はブラウザを閉じると期限切れになります。
④ $path: サーバー上の Cookie の有効なパスを示します。デフォルト値は、Cookie が設定されている現在のディレクトリです。
⑤ $domain: サーバー上の Cookie の有効なドメイン名を示します。たとえば、example.com ドメイン名のすべてのサブドメインで Cookie を有効にするには、このパラメータを「.example.com」に設定する必要があります。

2) Cookie にアクセスします。 setcookie() 関数によって作成された Cookie は、事前定義された変数 $_COOKIE に配列の単位として保存されます。つまり、$_COOKIE配列単位に直接値を代入してCookieを作成することもできます。ただし、$_COOKIE 配列によって作成された Cookie は、セッションの終了後に期限切れになります。

3)删除Cookie。Cookie在创建时指定了一个过期时间,如果到了过期时间,那么Cookie将自动被删除。在PHP中没有专门删除Cookie的函数。如果为了安全方面的考虑,在Cookie过期之前就想删除Cookie,那么可以使用setcookie()函数或$_COOKIE数组将已知Cookie的值设为空。
示例代码如下:

<?php
    $_COOKIE["user"]="administrator";
    setcookie("password","123456",time()+3600);
    $_COOKIE["user"]="";                    //使用$_COOKIE清除Cookie
    setcookie("password","");                //使用setcookie()函数清除Cookie
    print_r($_COOKIE);                    //输出:Array ( [user] => )
?>

Cookie和Session都是用来实现会话机制的,由于HTTP协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的状态,需要有一个机制,称为会话机制。

以上がPHP インタビューにおけるセッション制御の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。