ケータイでは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
我同意楼上的