ケータイサイトでの認証とかについて 実装「セッション」編

ページごとにセッションを使うかどうかを一括してコントロールしたいので初期実行ファイル(init.php)でセッションを使うページを配列として定義する。
セッション管理をするためのクラス(Session.class.php)で、実行ファイル(メインスクリプト)の判定処理とセッション制御処理を挿入する。

セッションを有効にするページ以外にアクセスしてもsession_start()は呼ばれないので、検索エンジンのクローラのアクセスにセッションidが取り込まれることがなくなる。

<?php
/*
 * セッションを有効にするスクリプトの定義
 */
static $__SESSION_CLASS_CONTROL__ = array( 'commentEntry.php',
  'delete.php',
  'detail.php',
  'registAndJump.php',
  'sharedCheck.php',
  'top.php',
  'viewfile.php' );
include_once('Session.class.php');
/*
 * セッションを有効にするページでは
 * セッションの再生成をおこなってSessionIDを書換える
 */
if ( __IS_SESSION_CLASS_CALLED__ ) {
    if ( isset($_SESSION) ) sessionRegenerate();
}
?>
  • Session.class.php の冒頭部分
<?php /* -*-java-*- */

/*
 * セッションの有効無効を管理するには
 * 定数配列 __SESSION_CLASS_CONTROL__ にスクリプト名を代入する
 * この定数が宣言されていなければ、これまで通りに使用できる。
 */
if ( isset( $__SESSION_CLASS_CONTROL__ ) ) {
    if ( in_array( basename($_SERVER['SCRIPT_FILENAME']),
                   $__SESSION_CLASS_CONTROL__ ) ) {
        define('__IS_SESSION_CLASS_CALLED__', TRUE );
    }
    else {
        define('__IS_SESSION_CLASS_CALLED__', FALSE );
    }
}
else {
    define('__IS_SESSION_CLASS_CALLED__', TRUE );
}

/*
 * セッション有効の場合だけ、session_start()する。
 */
if ( __IS_SESSION_CLASS_CALLED__ ) {
    session_start();
}
?>