PHPでのセッション管理
PHPでのセッション管理は1)クッキーを使う方式、2)内部リンクのURLの後ろに引数としてセッションIDを付与する方式(URL埋め込み方式)の2通りあります。
前述のとおり、携帯電話の多くはクッキーにまだ対応していませんので2)のURL埋め込み方式をとります。
php.iniに以下の2つのパラメーターを使って2)のURL埋め込み方式を実装します。
| パラメータ名 | 意味 |
| session.use_trans_sid | セッションが有効な場合、セッションIDをURLに自動で付加する |
| session.use_cookies | セッションにクッキーを使用する |
それぞれ有効:1、無効:0の値で設定します。
今回のサンプルは携帯が対象となるシステムなので「session.use_trans_sid」の他に「session.use_cookies」でクッキーにセッションを持たないようにして以下のようにphp.iniに設定します。
session.use_trans_sid = 1 session.use_cookies = 0
レンタルサーバーの制約などでphp.iniの変更ができない場合はApacheの.htaccessで同じ設定ができます。
php_flag session.use_trans_sid On php_flag session.use_cookies Off
上記の設定を行ってPHP内でセッションが開始された場合、リンクの後ろにはには「SESSID=XXXXX」、フォーム内には<input type="hidden" name="SESSID" value="XXXXX" />のようにセッションを遷移先の画面へ引き継げるようなIDと値のペアが自動で付加されます。
サンプル実行用のデータ作成
以下のSQLを実行してテーブルを作成します。
CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL auto_increment COMMENT 'ID', `user_id` varchar(255) NOT NULL COMMENT 'ユーザーID', `password` varchar(255) NOT NULL COMMENT 'パスワード', `user_name` varchar(255) default NULL COMMENT 'ユーザー名', `uid` varchar(255) NOT NULL COMMENT '携帯端末ID', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
次にinsert.phpに携帯電話からアクセスして「user_id」「password」「user_name」を入力してテストデータを作成します。
この際に携帯電話の端末IDも取得してユーザーデータを作成します。携帯端末で端末IDを送出しないように設定している場合は解除してからアクセスします。
DB接続情報はconfig.phpに記述して、データ作成はPDOを用います。
define('MYSQL_HOST' , 'MySQLサーバーのアドレス');
define('MYSQL_USER' , 'MySQLユーザー名');
define('MYSQL_PASSWORD' , 'MySQLユーザーのパスワード');
define('MYSQL_DATABASE' , 'データベース名');
define('dbType' , "mysql");
define('OPTION_CNF' , 'option.cnf');
[client] default-character-set=sjis
// ユーザーID取得
$user_id = $_POST['user_id'];
// パスワード取得
$password = $_POST['password'];
// ユーザー名取得
$user_name = $_POST['user_name'];
if($user_name){
// 端末IDを取得
$agent = Net_UserAgent_Mobile::singleton();
$uid = $agent->getUID();
// DB接続
$pdo = new PDO(dbType.":host=".MYSQL_HOST."; dbname=".MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD,
array( PDO::MYSQL_ATTR_READ_DEFAULT_FILE => OPTION_CNF ));
$stmt = $pdo->prepare("INSERT INTO user (user_id, password, user_name, uid) VALUES(:USER_ID, :PASSWORD, :USER_NAME, :UID)");
// ユーザーデータ作成
$stmt->bindValue(':USER_ID', $user_id);
$stmt->bindValue(':PASSWORD', md5($password));
$stmt->bindValue(':USER_NAME', $user_name);
$stmt->bindValue(':UID', $uid);
$stmt->execute();
}
MySQLのバージョンが5.07以上の場合、PDOの「PDO::MYSQL_ATTR_READ_DEFAULT_FILE」属性を利用して指定したファイルからオプションを読み込ませることが可能です。サンプルではMySQL接続時の文字コードをSJISにしています。 サンプルではconfig,php, option.cnfともにinsert.phpと同じディレクトリに配置しておりますが、実際のシステム開発ではドキュメントルートの外に配置して下さい。
サンプルではユーザーID「123」、パスワード「abc」、ユーザー名「鳩山」で作成しています。