ホームページ  >  記事  >  バックエンド開発  >  php_PHPチュートリアルでのSessionの使い方を詳しく解説

php_PHPチュートリアルでのSessionの使い方を詳しく解説

WBOY
WBOYオリジナル
2016-07-13 10:18:02785ブラウズ

phpでのSessionの使い方を詳しく解説

Sessionの宣言と使い方

セッション設定はCookieとは異なり、最初にPHPでSession_start()を呼び出す必要があります。 session_start() 関数の構文形式は次のとおりです:

Bool session_start(void) //セッションの作成、セッションの開始、セッションの初期化

注: session_start() 関数の前に出力はありません

初めて Web サイトにアクセスすると、Seesion_start() 関数によって一意のセッション ID が作成され、そのセッション ID が HTTP 応答ヘッダーを通じてクライアント Cookie に自動的に保存されます。同時に、ユーザーのセッション情報を保存するために、サーバー側でセッション ID に基づいた名前のファイルも作成されます。同じユーザーが再度この Web サイトにアクセスすると、Cookie に保存されている Seesion ID が HTTP リクエスト ヘッダーを通じて自動的に引き継がれます。このとき、Session_start() 関数は新しいセッション ID を割り当てませんが、サーバーのハード検索を行います。セッション ID と同じ名前のセッション ファイルをディスクに保存し、このユーザー用に以前に保存されたセッション情報を読み出し、それを現在のスクリプトに適用して、このユーザーを追跡するという目的を達成します。 セッションは、$_SESSION['セッション名']

のような配列の形式で使用されます。

セッション変数を登録してSessionを読み込む

PHP でセッション変数を使用する場合、起動するだけでなく、登録プロセスも実行する必要があります。 $_SESSION配列にアクセスすることでセッション変数の登録と読み込みが完了します。 $_SESSION 連想配列のキー名には、PHP の通常の変数と同じ命名規則があります。セッション変数を登録するコードは次のとおりです:

コードは次のとおりです

このスクリプトを実行すると、2 つのセッション変数がサーバー側のファイルに保存されます。ファイルの場所は、php.ini ファイルを通じて、session.save_path 属性で指定されたディレクトリに保存されます。

変数の登録を解除し、セッションを破棄します

Session 変数は使用されている場合は削除でき、セッションが完了すると破棄することもできます。ユーザーが Web システムからログアウトすると、ログアウト機能が提供される必要があり、ユーザーの情報はすべてサーバー内で破棄されます。現在のセッションに関連するすべてのデータを破棄するには、session_destroy() 関数を呼び出して現在のセッションを終了し、セッション内のすべてのリソースをクリアします。この関数の構文形式は次のとおりです:

bool session_destroy(void) //現在のセッションに関連するすべてのデータを破棄します

この関数は、現在のセッションに関連する変数を解放したり、クライアントの Cookie に保存されたセッションを削除したりすることはありません

ID。 $_SESSION 配列とカスタム配列の使用方法は同じであるため、unset() 関数を使用して、セッションに登録されている単一の変数を解放できます。以下に示すように:

unset($_SESSION['キー名']);

unset($_SESSION) を使用して $_SESSION 配列全体を削除しないように注意してください。これにより、$_SESSION スーパー グローバル配列を介して変数を登録できなくなります。ただし、ユーザーがセッションに登録したすべての変数を削除したい場合は、配列変数 $_SESSION を空の配列に直接割り当てることができます。以下に示すように:

$_SESSION=array()

PHPのデフォルトセッションはCookie、Sessionに基づいています

ID はサーバーによってクライアントの Cookie に保存されるため、セッションからログアウトするときは、Cookie に保存されている SessionID もクリアする必要があり、これは setCookie() 関数を使用して行う必要があります。 PHP スクリプトでは、session_name() 関数を呼び出すことでセッション名を取得できます。クライアントCookieに保存されたセッションを削除します

ID、コードは以下の通りです:

//セッションの初期化を開始します
session_start();
//セッション変数を登録し、ユーザーの名前に割り当てます
$_SESSION["ユーザー名"]="スカイガオ";
//セッション変数を登録し、ユーザーのIDに割り当てます
$_SESSION["uid"]=1;
?>

これまでの紹介を通じて、セッションのログアウトプロセスには合計 4 つのステップが必要であると結論付けることができます。次の例では、完全な 4 ステップのコードが提供されています。スクリプトを実行すると、セッションが閉じられ、このセッションに関連するすべてのリソースが破棄されます。コードは次のようになります:

コードは次のとおりです
// Cookie にセッション ID が存在するかどうかを判断します
if(isset($_COOKIE[セッション名()])){
// セッション ID を含む Cookie を削除します。4 番目のパラメーターは php.ini に設定されているパスと同じである必要があることに注意してください。 setcookie(session_name(),'',time()-3600,'/');
}
?>
コードは次のとおりです

//ステップ 1: セッションを開いて初期化します
session_start();

//パート 2: すべてのセッション変数を削除する unset($_SESSION[XXX]) を使用して 1 つずつ削除することもできます
$_SESSION = array();

//パート 3: Cookie ベースのセッションを使用している場合は、setCookkie() を使用してセッション ID を含む Cookie を削除します
if(isset($_COOKIE[セッション名()])) {
setCookie(セッション名(), "", time()-42000, "/");
}

//パート 4: 最後にセッションを完全に破棄します
session_destroy();

?>

セッションphpini設定オプション

php.ini ファイルとセッションに関連するいくつかの一般的な構成オプション:

session.auto_start = 0; リクエスト開始時にセッションを初期化します

session.cache_expire = 180; キャッシュ内のセッションドキュメントがn分後に期限切れになるように設定します

session.cookie_lifetime = 0; Cookieの保存時間を秒単位で設定します。0の場合、ブラウザが再起動されるまでを意味します。

session.auto_start=1 なので、セッションを使用するたびに session_start() を呼び出す必要はありません。ただし、このオプションを有効にする場合は、いくつかの制限があります。セッション内でオブジェクトを再作成するには、セッションを開始する前にクラス定義をロードする必要があるため、オブジェクトをセッションに配置することはできません。

session.cookie_path = / ; クッキーの有効なパス

session.cookie_domain = ; Cookie の有効なドメイン

session.name = PHPSESSID; Cookieで使用されるセッションの名前

session.save_handler = files; データの保存・取得の制御方法

session.save_path = /tmp ; save_handler がファイルに設定されている場合にコントローラーに渡されるパラメーターです

session.use_cookies = 1; Cookieを使用するかどうか

セッションの自動ガベージコレクションメカニズム

session_destroy() 関数を通じてページに「終了」ボタンを提供し、クリックするとこのセッションを破棄できます。ただし、ユーザーが終了ボタンをクリックせずに直接ブラウザを閉じたり、インターネット接続を切断した場合は、サーバー上に保存されているセッションファイルは削除されません。ブラウザを閉じて、次回ログインするときに新しいセッション ID を再割り当てする必要がありますが、これは php.ini の設定 seesion.cookie_lifetime=0 によってクライアント Cookie のセッション ID の有効期間が設定されているためです。ブラウザに送信される Cookie の有効期間 (秒単位)。システムがセッションに有効期間を与えると、ブラウザが開かれているかどうかに関係なく、セッション ID は自動的に消去されます。クライアントのセッションIDが消滅しても、サーバー上に保存されていたセッションファイルは削除されていません。したがって、Sessoin IDで参照されていないサーバー側のSessionファイルは「ゴミ」となります。

サーバーが保存するセッションファイルは通常のテキストファイルなので、ファイル変更時間が発生します。 「ガベージ コレクション プログラム」が開始されると、セッション ファイルの変更時刻に基づいて、期限切れのセッション ファイルがすべて削除されます。 php.ini の session.gc_maxlifetime オプションを設定して時間 (単位: 秒) を指定します。たとえば、オプションの値を 1440 (24 分) に設定します。 「ガベージ コレクション プログラム」はすべてのセッション ファイルをチェックし、変更時間が現在のシステム時刻から 1440 秒を超えている場合は削除します。

「セッションガベージコレクションプログラム」の起動メカニズムとは何ですか? 「ガベージコレクションプログラム」は、session_start()関数が呼び出されたときに起動されます。 Web サイトに複数のスクリプトがある場合、セッションを開くには session_start() 関数を使用する必要があり、多くのユーザーが同時にアクセスすることになります。 1 秒間に N 回呼び出され、毎回呼び出されるたびに「セッション ガベージ コレクション プログラム」が開始されることになり、非常に不合理です。 php.ini ファイルの「session.gc_probability および session.gc_divisor」オプションを変更することで、ガベージ コレクション プログラムを開始する確率を設定できます。確率は「session.gc_probability/session.gc_divisor」の公開情報に基づいて計算されます。たとえば、オプション session.gc_probability=1 およびオプション session.gc_divisor=100 の場合、確率は「1/100」になります。 、session_start() 関数が 100 回呼び出されると、「ガベージ コレクション プロセス」を開始できます。

php.iniの関連設定

session.cookie_lifetime=0; ブラウザを閉じると、対応するCookieファイルが削除されます

session.gc_maxlifetime; セッションの有効期限を設定します、デフォルトは1440秒(24分)です

session.gc_probability/session.gc_divisor; ガベージコレクション機構を開始する確率(推奨値は1/1000~5000)

Cookieが無効になっている場合は、URLを通じてセッションIDを渡します

Session を使用してユーザーを追跡するには、各ページ間で一意のセッション ID を渡し、そのセッション ID を通じてユーザーがサーバーに保存したセッション変数を抽出します。一般的なセッション ID の送信方法は 2 つあります。

最初の方法は、Cookie に基づいてセッション ID を渡すことです。この方法はより最適ですが、ユーザーはクライアントで Cookie をブロックできるため、常に利用できるわけではありません。

2 番目の方法は、url パラメーターを介して渡し、セッション ID を URL に直接埋め込むことです。

Sessionの実装では通常Cookieが使用されます。クライアントが保存するSession IDはCookieです。お客様が Cookie を無効にすると、セッション ID を Cookie に保存できず、ページ間で受け渡すこともできなくなります。ただし、PHP5 は Linux プラットフォーム上の Cookie ステータスを自動的にチェックできます。クライアントがそれを無効にすると、システムは自動的にセッション ID を URL に追加して送信します。ただし、Windows システムを Web サーバーとして使用する場合、この機能はありません。

セッションを追跡するための別のメカニズムが PHP で提案されています。クライアントのブラウザが Cookie をサポートしていない場合、PHP はクライアントによって要求された URL を書き換えて、URL 情報にセッション ID を追加できます。各ハイパーリンクの URL にセッション ID を手動で追加することもできますが、作業負荷が比較的大きいため、この方法はお勧めできません。以下に示すように:

コードは次のとおりです

//オープンセッション
session_start();

//各 URL の後にパラメータを追加します。変数名は session_name() で名前を取得し、値は session_id() で取得します
echo 'デモに接続';
?>
Linux システムをサーバーとして使用する場合、PHP の編集時に –enable-trans-sid 構成オプションが使用され、ランタイム オプション session.use_trans_sid が有効になっている場合、クライアントで Cookie が無効になっていると、相対 URL が自動的に変更されます。 to セッション ID が含まれます。これが構成されていない場合、または Windows システムをサーバーとして使用している場合は、固定 SID を使用できます。この定数は、セッションの開始時に定義されます。クライアントが適切なセッション Cookie を送信しない場合、SID の形式は session_name=session_id になります。それ以外の場合は、空の文字列になります。したがって、無条件で URL に埋め込むことができます。次の例では、2 つのスクリプト プログラムを使用してセッション ID の送信方法を示します。

session_start();

$_SESSION["ユーザー名"]="管理者";

echo "セッション ID:".session_id()."
";

?>

URL を通じてセッション ID を渡します

スクリプトtest2.phpでは、test1.phpスクリプトでSession変数に保存した別のユーザー名を出力します。セッション ID がこのページに再度出力され、比較により 2 つのスクリプトが同じセッション ID を使用しているかどうかが判断されます。また、Cookieをオンまたはオフにする場合は、ブラウザのアドレスバーのURLの変化にご注意ください。コードは次のようになります:

コードは次のとおりです

session_start();

echo $_SESSION["ユーザー名"]."< br>";
echo "セッション ID:".session_id()."
";
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/886551.html技術記事 PHP での Session の使用方法の詳細な説明。セッションの宣言と使用設定は、PHP で最初に呼び出す必要があります。 session_start() 関数の構文...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。