ホームページ >バックエンド開発 >PHPチュートリアル >PHP の基礎となる開発原則の詳細な研究: セッション管理と状態保持方法

PHP の基礎となる開発原則の詳細な研究: セッション管理と状態保持方法

PHPz
PHPzオリジナル
2023-09-08 13:31:471459ブラウズ

PHP の基礎となる開発原則の詳細な研究: セッション管理と状態保持方法

PHP の基礎となる開発原則の詳細な研究: セッション管理と状態保持方法

  1. まえがき

最新の Web 開発、セッション管理、状態保持は非常に重要な部分です。ユーザーのログイン状態を維持する場合でも、ショッピングカートなどの状態を維持する場合でも、セッション管理や状態維持技術が必要となります。 PHP の基礎となる開発では、Web アプリケーションをより適切に設計および調整するために、セッション管理と状態保持の原理と方法を理解する必要があります。

  1. セッション管理の基本

セッションとは、クライアントとサーバー間の対話型プロセスを指します。 PHP では、ユーザー状態情報を保存および維持するためにセッションが使用されます。 PHP は、Cookie、URL 書き換え、非表示のフォーム フィールドなどを含む、さまざまなセッション管理メカニズムを提供します。最も一般的に使用されるのは Cookie メカニズムです。

2.1 Cookie セッション管理

Cookie はクライアント側にデータを保存するためのメカニズムであり、ユーザーのブラウザーにデータを保存できます。 PHP では、setcookie() 関数を使用して Cookie を設定できます。簡単な例を次に示します。

setcookie("username", "john", time() + 3600, "/");

上記のコードは、「username」という名前の Cookie を作成し、その値を「john」に設定します。 3 番目のパラメーターは Cookie の有効期限で、現在時刻の 3600 秒に設定されます。つまり、Cookie は 1 時間で期限切れになります。最後のパラメータは Cookie のスコープで、「/」に設定すると、Cookie が Web サイト全体に適用されることを意味します。

Cookie の値を取得するには、$_COOKIE 配列を使用できます。例:

echo $_COOKIE["username"];

上記のコードは、Cookie に「username」という名前の値を出力します。

2.2 セッション ID の送信

Cookie セッション管理を使用する場合、セッション ID の送信に注意する必要があります。通常、セッション ID は Cookie の形式でクライアントに保存されます。ユーザーが次のリクエストを行うと、サーバーがセッション状態を維持し続けることができるように、セッション ID が自動的にサーバーに送信されます。

ただし、場合によっては、ユーザーのブラウザが Cookie を無効にしているため、セッション ID が正しく配信されないことがあります。この問題を解決するために、PHP は URL の書き換えとフォーム フィールドの非表示という 2 つの代替手段を提供します。

2.2.1 URL 書き換え

URL 書き換えは、URL パラメーターの一部としてセッション ID を渡す方法です。例:

<a href="page.php?session_id=<?php echo session_id(); ?>">Link</a>

上記のコードは、パラメータ名が「session_id」のクエリ パラメータとしてセッション ID を渡します。

サーバー側では、session_id() 関数を使用して URL に渡されたセッション ID を取得し、session_id() 関数を通じてセッション ID を設定できます。例:

session_id($_GET["session_id"]);
session_start();

上記のコードは、URL で渡されたセッション ID を使用してセッションを開始します。

2.2.2 非表示フォーム フィールド

非表示フォーム フィールドは、セッション ID を非表示フィールドの形式で渡す方法です。例:

<form action="page.php" method="post">
  <input type="hidden" name="session_id" value="<?php echo session_id(); ?>">
  <input type="submit" value="Submit">
</form>

上記のコードは、セッション ID を隠しフィールドとして「session_id」という名前のフォーム フィールドに渡します。

サーバー側では、$_POST 配列を使用して、非表示のフォーム フィールドによって渡されたセッション ID を取得し、session_id() 関数を通じてセッション ID を設定できます。例:

session_id($_POST["session_id"]);
session_start();

上記のコードは、非表示のフォーム フィールドに渡されたセッション ID を使用してセッションを開始します。

  1. 状態保持方法

セッション管理に加えて、状態保持も非常に重要な部分です。 PHP は、セッション、データベース、キャッシュなど、さまざまな状態保持方法を提供します。以下にそれぞれの方法を紹介しましょう。

3.1 セッション状態の保持

セッションは、サーバー側で状態を保存する方法であり、ユーザーのログイン ステータスやその他の情報を維持するために使用できます。 PHP では、$_SESSION 配列を使用してセッションを保存し、アクセスできます。例:

$_SESSION["username"] = "john";

上記のコードは、「username」という名前のセッションを作成し、その値を「john」に設定します。 Session の値を取得するには、$_SESSION 配列を使用できます。

echo $_SESSION["username"];

上記のコードは、Session に「username」という名前の値を出力します。

セッション状態の永続性を使用する場合は、各スクリプトで session_start() 関数を使用してセッションを開始する必要があります。例:

session_start();

3.2 データベース状態の永続性

データベース状態の永続性は、状態情報をデータベースに保存する方法であり、セッションおよびリクエスト全体の状態管理に使用できます。 PHP では、MySQL、SQLite、その他のデータベースを使用してデータベースの状態を維持できます。

まず、ステータス情報を保存するテーブルを作成する必要があります。たとえば、次は「users」という名前のテーブルの作成ステートメントです:

CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL
);

次に、ログイン時に、ユーザーのステータス情報をデータベースに保存できます。例:

// 连接数据库
$pdo = new PDO("mysql:host=localhost;dbname=test", "username", "password");

// 插入状态信息
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->bindParam(":username", $username);
$stmt->bindParam(":password", $password);
$stmt->execute();

後続のリクエストでは、データベースにクエリを実行することでユーザーのステータス情報を取得および更新できます。例:

// 查询状态信息
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(":username", $username);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);

3.3 キャッシュ状態の保持

キャッシュ状態の保持は、状態情報をキャッシュ サーバーに保存する方法であり、アクセス速度を向上させ、データベース アクセスの数を減らすために使用できます。 。 PHP では、Memcached や Redis などのキャッシュ サーバーを使用してキャッシュ状態を維持できます。

まず、キャッシュ サーバーに接続する必要があります。たとえば、Memcached を使用した接続例を次に示します。

$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

次に、ログイン時に、ユーザーの状態情報をキャッシュ サーバーに保存できます。例えば:###

$memcached->set("user:" . $username, $userinfo, 3600);

在后续的请求中,我们可以通过查询缓存服务器来获取和更新用户的状态信息。例如:

$userinfo = $memcached->get("user:" . $username);

以上がPHP の基礎となる開発原則の詳細な研究: セッション管理と状態保持方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。