セッション処理は PHP の非常に重要な概念であり、Web サイトまたはアプリケーションのすべてのページでユーザー情報を変更しないようにすることができます。以下の記事ではPHPにおけるセッション処理の基礎知識を解説していますので、ご参考になれば幸いです。
PHP のセッションとは何ですか?
セッションは、Web サイトまたはアプリケーションを閲覧するユーザーを識別するために、さまざまな Web ページ上の情報を保持するメカニズムです。 [ビデオチュートリアルの推奨: PHP チュートリアル]
誰もが次の疑問を抱くはずです: なぜ Web サイトにはセッションが必要なのでしょうか? この問題について議論する前に、HTTP プロトコルがどのように機能するのかを振り返って見る必要があります。
HTTP プロトコルはステートレス プロトコルです。つまり、サーバーはリクエスト間で特定のユーザーを記憶することができません。たとえば、Web ページにアクセスすると、サーバーは要求されたページのコンテンツを提供することだけを担当します。そのため、同じ Web サイト上の他のページにアクセスすると、Web サーバーは各リクエストを互いに無関係であるかのように個別に解釈します。サーバーは、すべてのリクエストが同じユーザーからのものであることを知る方法がありません。
次の図は、HTTP プロトコルを簡単に説明したものです。
#このプロセスで、特定のユーザーの情報を表示したい場合は、すべてのリクエストでユーザーを認証する必要があります。リクエストを行うたびに、認証のためにページにユーザー名とパスワードを入力する必要がある場合を想像してみてください。これは非常に面倒で、まったく実用的ではありません。ただし、この時点ではセッションが役に立ちます。
セッションを使用すると、ユーザーは単一のサイトまたはアプリケーションのさまざまなページ間で情報を共有できるため、状態の維持に役立ちます。これにより、すべてのリクエストが同じユーザーからのものであることがサーバーに認識され、サイトがユーザー固有の情報や設定を表示できるようになります。
次の図は、HTTP プロトコルがセッションでどのように使用されるかを示しています。
#PHP はセッションをどのように処理しますか?
1. セッションの開始
セッション変数を処理する場合は、セッションが開始されていることを確認する必要があります。 PHP でセッションを開始するには、いくつかの方法があります。 1)、session_start 関数を使用します。 これは最も一般的な方法で、session_start 関数によってセッションが開始されます。<?php // 启动session session_start(); // 操作会话变量 ?>重要なのは、出力がブラウザに送信される前に、スクリプトの先頭で session_start 関数を呼び出す必要があることです。そうしないと、悪名高い「ヘッダーはすでに送信されました」というエラーが発生します。 2)、セッションを自動的に開始するアプリケーション全体でセッションを使用する必要がある場合は、session_start 関数を使用せずにセッションを自動的に開始することも選択できます。 php.ini ファイルには設定オプション session.auto_start があり、リクエストごとにセッションを自動的に開始できます。デフォルトでは 0 に設定されていますが、1 に設定して自動開始機能を有効にすることができます。
session.auto_start = 1
2. セッション ID を取得します
サーバーは、新しいセッションごとに一意の ID を作成します。セッション ID を取得したい場合は、次のスニペットに示すように session_id 関数を使用できます。<?php session_start(); echo session_id(); ?>これにより、現在のセッション ID が得られます。 session_id 関数は、セッション ID という 1 つのパラメーターも受け取ることができるため、興味深いものです。システムが生成したセッション ID を独自のセッション ID に置き換える場合は、それを session_id 関数の最初のパラメーターに指定できます。
<?php session_id(YOUR_SESSION_ID); session_start(); ?>カスタム セッション ID を使用してセッションを開始する場合は、session_start の前に session_id 関数を呼び出す必要があることに注意することが重要です。
3. セッション変数の作成
セッションが開始されると、$_SESSION は対応するセッション情報を使用してスーパーグローバル配列を初期化します。デフォルトでは、空の配列で初期化されます。キーと値のペアを使用して、より多くの情報を保存できます。 コード例を通じてセッション変数を初期化する方法を見てみましょう。<?php // 开启会话 session_start(); // 初始化会话变量 $_SESSION['logged_in_user_id'] = '1'; $_SESSION['logged_in_user_name'] = 'Tutsplus'; // 访问会话变量 echo $_SESSION['logged_in_user_id']; echo $_SESSION['logged_in_user_name']; ?>上に示したように、スクリプトの先頭で session_start 関数を使用してセッションを開始します。その後、いくつかのセッション変数を初期化します。最後に、$_SESSION スーパーグローバルを使用してこれらの変数にアクセスします。 $_SESSION スーパーグローバルを使用してセッションにデータを保存すると、データは最終的に、セッションの開始時に作成されるサーバー上の対応するセッション ファイルに保存されます。このようにして、セッション データは複数のリクエスト間で共有されます。 前述したように、セッション情報はリクエスト間で共有されるため、あるページで初期化されたセッション変数は、セッションが期限切れになるまで他のページからもアクセスできます。通常、ブラウザを閉じるとセッションが期限切れになります。
4. セッション変数の変更と削除
通常の PHP 変数を変更するのと同じように、アプリケーションで以前に作成したセッション変数を変更または削除できます。 セッション変数を変更する方法を例として見てみましょう。<?php session_start(); if (!isset($_SESSION['count'])) { $_SESSION['count'] = 1; } else { ++$_SESSION['count']; } echo $_SESSION['count']; ?>
在上面的脚本中,我们首先检查了是否设置了$_session['count']变量。如果没有设置,我们将设置为1,否则我们将增加1。因此,如果多次刷新此页,可以看到计数器每次递增一个!
另一方面,如果想要删除会话变量,可以使用unset函数,如下面的代码段所示:
<?php // 开启会话 session_start(); // 初始化会话变量 $_SESSION['logged_in_user_id'] = '1'; // 取消设置会话变量 unset($_SESSION['logged_in_user_id']); ?>
这样,我们就无法再访问$_SESSION[‘logged_in_user_id’]变量了。因为它已被unset函数删除。
5、销毁会话
在上面我们知道可以使用unset函数来删除特定的会话变量;那么如果要一次删除所有与会话相关的数据,我们要怎么办?
其实很简单,我们可以使用session_destroy函数。
下面我们来看看session_destroy函数是如何工作的。
<?php //开启会话 session_start(); // 假设我们已经在另一个脚本中初始化了几个会话变量 // 销毁此会话中的所有内容 session_destroy(); ?>
说明:session_destroy函数删除存储在当前会话中的所有内容。因此,当存储在磁盘上的会话数据被session_destroy函数删除时,我们将从后续请求中看到一个空的会话变量。
注:通常,在用户注销时才会使用session_destroy函数。
以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!
以上がPHPでセッション処理を行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。