文系プログラマの勉強ノート

スマホアプリ開発やデザインなどについて勉強したことをまとめています

【PHP】データを次の画面以降に引き継ぐ方法

画面には表示しない内部データを次の画面に引き継ぎたいとき、いくつかある方法のサンプルコードや特徴、使い分け方について勉強したことをまとめます。
まだざっくりとしか調べていないので、間違っているところがあればご指摘いただければ幸いです。

1. hidden

使い方
// 渡し方
<form name="form1" method="post" action="confirm.php">
    <p>
        <label for="name">タイトル:</label><input type="text" name="title">
    </p>
    <p>
        <label for="name">本文:</label><textarea name="body_text" cols="30" rows="5"></textarea>
    </p>

    <input type="hidden" name="login_id" value="abc123">
    <p>
        <input type="submit" value="確認">
    </p>
</form>

// 受け取り方
<?php
    print "<p>";
    print "タイトル:".$_POST["title"];
    print "</p>";

    print "<p>";
    print "本文:".nl2br($_POST["body_text"]);
    print "</p>";

    print "<p>";
    print "ログインID:".$_POST["login_id"];
    print "</p>";
?>
メリット

・セッションなどの知識がなくても簡単に利用できる

デメリット

・<form>タグ内でしか使えない
ソースコードを表示すると値が見えてしまう
・2画面以上先へ引き継げない

⇒フォームを使用した画面遷移で、値を簡易に引き継ぎたい時などに使える

2.cookie(クッキー)

使い方
// 渡し方
<?php
    // クッキーを送信(有効期限30日)
    setcookie("login_id", "id00001", time() + 60 * 60 * 24 * 30);
?>
// 受け取り方
<?php
    if (isset($_COOKIE["login_id"])) {
        print "<p>";
        print "ログインID:".$_COOKIE["login_id"];
        print "</p>";
    }
?>
// 消し方
<?php
    // 有効期限に現在よりも前の時間を設定
    setcookie("login_id", "", time() - 60);
?>
メリット

・一度セットした値を複数画面で使える

デメリット

・クライアント側に保存されるため、改竄が可能である
・一つのドメインで保存できる数に上限がある(上限数はブラウザによって異なる)

⇒利用者の識別情報、セッションIDなど、クライアント側で保存しておきたい情報に使える

3.session(セッション)

使い方
// 渡し方
<?php
    session_start();

    // 有効期限30日
    session_cache_expire(60 * 24 * 30);
    $_SESSION["login_id"] = "id00001";
?>
// 受け取り方
<?php
    session_start();

    if (isset($_SESSION["login_id"])) {
        print "<p>";
        print "ログインID:".$_SESSION["login_id"];
        print "</p>";
    }
?>
// 消し方
<?php
    session_start();

    // セッション変数をすべて削除
    session_unset();
    // セッションIDおよびデータを破棄
    session_destroy();
?>
メリット

・一度セットした値を複数画面で使える
・サーバ側で保存するため、データ改竄の心配がない

デメリット

・サーバ上にセッションファイルを保存するため、適切な権限の設定が必要=やや知識が必要


⇒ログインにより取得したユーザ情報、ショッピングサイトの買い物かごデータなどに使える
(接続から切断までの一連の通信がセッションの典型例としてよく挙げられていることから、
クッキーよりも短期間、一時的なものという印象を受けました)


大雑把な使い分けとしては、

  • フォームで次の画面まで引き継ぎたい&ユーザに見えても構わない情報→hidden
  • 偽装されてはいけない情報→session
  • 偽装されても問題ない情報、接続時にサーバへ送りたい情報→cookie

という感じでしょうか。