PHPプログラミング

最終更新日:
公開日:

ワークショップ

ひと言掲示板を作る(14)

セッションで表示名の入力を省略する

「ひと言掲示板」にセッションを導入して、書き込みの入力を便利にするための機能をつけていきます。

この記事のポイント

  • セッションに入力データの一部を保存する
  • セッションは再アクセスすると有効期限が自動的に延長される

目次

セッションを導入する

前回は今までに作成したコードを整理しました。
今回からはセッションを導入して、掲示板の利便性を改善していきます。

「ひと言掲示板を作る」の概要については「ひと言掲示板を作る」をご覧ください。
デモはこちら

前回までに作成したコードはこちら:Github

セッションについて

セッションはサーバーで管理&保持されます。
データを一時的に保存する場所として使用することができます。

よくある使い方としては、ユーザーのログイン状態をセッションに保存しておいて、ログイン情報があったら会員用ページを表示し、反対にログインしていない場合はログインページや会員登録ページを表示する判定部分です。

セッションに似た機能を提供するものに「Cookie(クッキー)」がありますが、セッションはサーバー上に存在するのに対して、Cookieはサイトの閲覧者が使うパソコン上に保存されるという点が大きく異なります。
Cookieはユーザーの環境によってそもそも使用できない(許可しない)こともあるため、ログイン情報などシステムとリアルタイムで連携するデータを保持したい場合はセッションを使うことが一般的です。

セッションの有効期限ですが、こちらはphpinfo関数から確認することができます。

session」項目の「session.gc_maxlifetime」に「秒」単位で数値が表示されます。
上の出力例のように「1440」と表示されている場合は有効期限が「1440秒」となり、ちょうど24分になります。
もしセッションが保持された状態で再アクセスがあると、そのセッションは自動的に有効期限が延長されます。

ただ、24分が経過してもセッションが絶対に消えるとは限りません。
セッションは破棄するものがある程度溜まってから削除を行うため、セッションが1つしかなかったりするとガベージコレクションがなかなか実行されず、有効期限が過ぎていてもセッションが残ってしまうことはよくあります。

セッションについてザックリと見てきたところで、ひと言掲示板にもセッションを導入してみましょう。

表示名をセッションに保存する

今回はセッションに掲示板で入力された「表示名」を保存し、掲示板によく書き込みを行う方の入力を少なくできるようにしていきます。
まずは、次のようにsession_start関数を追記してください。

index.php

<?php

---- 省略 ----

// 変数の初期化
$current_date = null;
$message = array();
$message_array = array();
$success_message = null;
$error_message = array();
$pdo = null;
$stmt = null;
$res = null;
$option = null;

session_start();

if( !empty($_POST['btn_submit']) ) {

---- 省略 ----

この関数はセッションの使用を開始するために実行します。
続いて、掲示板に書き込みを行うタイミングで「表示名」の入力があるときにセッションへ保存を行います。

index.php

<?php

---- 省略 ----

// 変数の初期化
$current_date = null;
$data = null;
$file_handle = null;
$split_data = null;
$message = array();
$message_array = array();
$success_message = null;
$error_message = array();
$clean = array();

session_start();

if( !empty($_POST['btn_submit']) ) {
	
	// 表示名の入力チェック
	if( empty($_POST['view_name']) ) {
		$error_message[] = '表示名を入力してください。';
	} else {
		
		// セッションに表示名を保存
		$_SESSION['view_name'] = $view_name;
	}
	
	// メッセージの入力チェック
	if( empty($_POST['message']) ) {

---- 省略 ----

セッションは「セッション変数」という$_SESSIONを通して値を操作し、連想配列と同じ手順で値の登録、更新、削除、参照ができるようになっています。
上記のコードのように登録したセッションの値を取り出すときは$_SESSION['view_name']を参照します。

最後に、セッションに「表示名」があったら入力された状態になるように設定します。
表示名のinput要素value属性に、次の赤いコードの部分を追記してください。

index.php


---- 省略 ----

<form method="post">
	<div>
		<label for="view_name">表示名</label>
		<input id="view_name" type="text" name="view_name" value="<?php if( !empty($_SESSION['view_name']) ){ echo htmlspecialchars( $_SESSION['view_name'], ENT_QUOTES, 'UTF-8'); } ?>">
	</div>
	<div>
		<label for="message">ひと言メッセージ</label>
		<textarea id="message" name="message"></textarea>
	</div>
	<input type="submit" name="btn_submit" value="書き込む">
</form>

---- 省略 ----

if文ではempty関数を使って表示名のセッションに値が入っているか確認し、値があったら出力する処理を加えています。
出力するときにhtmlspecialchars関数でサニタイズしているところもポイントです。

以上で設定は終了です。
ブラウザでひと言掲示板を開いてセッションがうまく動くか確認してみましょう。

書き込んだ後も、次のように表示名は入力したものがそのまま表示されます。

セッションの有効期限内であれば、ブラウザを一回閉じて後で開いてみても、同じように表示名は以前に入力したものが表示されます。

今回はここまでになります。
次回からは掲示板の書き込み内容を編集・削除することができる管理ページを作成していきます。

今回作成したコード:Github