ケータイではCookieを使えないので、通常のセッション管理ができない。URLにセッションIDを埋め込むなどの対策が必要になる。1.2での設定方法をまとめてみる。
/m/以下をケータイ用に振り分けことを前提に。
app/config/core.php
//Configure::write('Session.save', 'php'); Configure::write('Session.save', 'usersession'); //こちらに修正
セッションを扱う箇所を独自コードに置き換えることができる。コードは、app/config/usersession.phpに
記述する。
app/config/usersession.php
新規で作成。
<?php if (!isset($_SESSION)) { if (function_exists('ini_set')) { if(defined('MOBILE')){ //ケータイ用だったら ini_set('session.use_trans_sid', 1); //GETリクエストにセッションIDを自動的に埋め込む設定を有効 ini_set('session.use_cookies', 0); //Cookieの使用を無効 }else{ ini_set('session.use_trans_sid', 0); //無効 ini_set('session.use_cookies', 1); //有効 } } } ?>
MOBILEという変数は、別クラスで設定する
app_controller.php
<?php class AppController extends Controller { var $needAuth = false; var $helpers = array('html', 'form', 'time'); function beforeFilter() { //ケータイ用の振り分け if(isset($this->params['prefix'])){ $this->layout = 'mobile_'.$this->layout; } $auth = $this->Session->read( 'auth' ); $this->set( "auth", $auth ); if( $this->needAuth ){ if( empty( $auth ) ){ if(defined('MOBILE')){ //ケータイへの振り分けがされていたら、ケータイ向けのログイン画面へ $this->redirect( "/m/users/login" ); }else{ $this->redirect( "/users/login" ); } return ; } } if(defined('MOBILE')){ //ケータイ用にSJISに文字コード変換 mb_convert_variables('UTF-8','SJIS-win',$this->data); } ob_start(); //文字コード変換用の処理開始 parent::beforeFilter(); } function __construct() { // /m/がURLの中にあった場合、MOBILE変数を設定。このフラグを各クラスで判別 if(ereg("^/m/",$_SERVER['REQUEST_URI'])){ // もし、URLが/<em>servicename</em>/m/だったら、"^/<em>servicename</em>/m/" define('MOBILE',1); } parent::__construct(); } function afterFilter() { parent::afterFilter(); $out = ob_get_clean(); if(defined('MOBILE')){ $out = mb_convert_encoding($out,'SJIS-win','UTF-8'); //ケータイからの入力をSJISからUTF-8に変換 } echo $out; } //redirect メソッド書き換え function redirect($url,$status = null) { if(defined('MOBILE')){ $url = $url."?".session_name()."=".session_id(); //転送先URLにセッションIDを自動付加 } parent::redirect($url,$status); } } ?>
POSTのフォーム
GETでは、自動的にセッションIDが埋め込まれるが、POSTではセッションIDの埋め込みを明示的に行う必要がある。<form>で以下のように記述する。
<form action="foo?<?php session_name()."=".session_id();?>" method="POST">
参考サイト:
i hate html
我同意楼上的