.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
7 人のユーザが現在オンラインです。 (7 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 7

もっと...

.
.リンク集

メイン
   一般的な話題(General)
     Docomoとセッション
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hoge
投稿日時: 2007-9-26 17:22
Baker スタート
登録日: 2007-6-17
居住地:
投稿: 9
Docomoとセッション
docomo の携帯では


<?php
$this
->Session->write('セッション名',);
$this->Session->check('セッション名');
$this->Session->read('セッション名');
?>



というようなセッション用の関数は使えないのでしょうか?

現在開発中のシステムでは、ログイン認証後にIDとパスワードをセッションに保存するという処理を行い、
このセッションの有無によって、ログイン前後の制御を行っています。

auやsoftbankでは認証後のページが遷移しますが、docomoでは認証後にセッションを確認されて弾かれてしまいます。

認証後どのページにおいても、ID、パスワードなどの情報を持ち回せるようにするにはどのような方法があるのでしょうか?
hide99
投稿日時: 2007-9-26 19:09
一人前
登録日: 2007-7-2
居住地:
投稿: 106
Re: 携帯サイトDocomoとセッション
こんにちわ。ちょうど、今僕も携帯サイトを作っています。

基本的にcakephpに限らず、

「携帯サイトはクッキーを使用したセッションを使えない」

というのが前提です。
おそらくauやsoftbankでも古い機種だとセッション使えないんじゃないでしょうか。

a解決策:
多分これで大丈夫というのを書いてみますね。
ただドコモ携帯もってないのでテスト段階ですけど。

手順 1
http://www.1x1.jp/blog/2006/09/cakephp_mobile.html を参考に m/でアクセスした場合はモバイル用のビューを表示させる

手順 2
app/config/core.php の以下の設定を修正

<?php
define
('CAKE_SESSION_SAVE''usersession');//app/config/usersession.phpにセッション情報を自分で定義する
?>



手順 3
app/config/ フォルダ内に usersession.php を作成

<?php
<?php
if (!isset($_SESSION)) {
    if (
function_exists('ini_set')) {
        
ini_set('session.use_trans_sid'0);
        
ini_set('session.serialize_handler''php');
        
//クッキーの設定
        
if(defined('MOBILE')){
//モバイルからのアクセス、つまり /m/ のアクセスの場合はクッキーを使用しない。
            
ini_set('session.use_cookies'0);
        }else{
            
ini_set('session.use_cookies'1);
        }
    }
}
?>
?>



手順 4
コントローラーが読み込まれたら、モバイルからのアクセスか判定する

<?php
class AppController extends Controller {
    
    function 
__construct()
    {
                
// /m/がURLの中にあった場合、モバイルフラグを1にする。
        
if(ereg("^/m/",$_SERVER['REQUEST_URI'])){
            
define('MOBILE',1);
        }
        
        
parent::__construct();
    }

    function 
beforeFilter()
    {
        if(
defined('MOBILE')){
            
mb_convert_variables('UTF-8','SJIS-win',$this->data);
        }
        
        
ob_start();
        
parent::beforeFilter();
    }
    
    function 
afterFilter()
    {
        
parent::afterFilter();
        
$out ob_get_clean();
        
        if(
defined('MOBILE')){
            
$out mb_convert_encoding($out,'SJIS-win','UTF-8');
        }
        
        echo 
$out;
    }

    
//redirect メソッド書き換え
    
function redirect($url,$status null)
    {
        if(
defined('MOBILE')){
            
$url "m".$url."?".session_name()."=".session_id();
        }
        
        
parent::redirect($url,$status);
    }
}
?>



○モバイル用ビュー

<?php
<a href="'m/hosts/check?PHPSESSID='.session_id()">セッションID忘れずに!</a>

各リンクの後に ?PHPSESSID=.session_id() を埋め込む。
<form>
</
form>

の場合は hidden で PHPSESSID を送る。
?>




これで http://hogehoge.com/m/ (モバイルからのアクセス前提)にアクセスすれば以下のようになる はず です。

・なんとびっくり携帯からのアクセスは shift-jis に勝手にしてくれて 入力は utf-8 にしてくれる

・セッションはクッキーを使わないのでセッションIDを埋め込む形で処理できる。

・必要であれば 手順3 のところで モバイルからのアクセス時のみ、ini_set('session.use_trans_sid', 1); とすればいちいち session_id を埋め込む必要なし。

ちょっと見づらくなりましたが、いかがでしょうか


2007/12/04 リダイレクトメソッドもうまく動くように追記しました!
hide99
投稿日時: 2007-12-5 22:08
一人前
登録日: 2007-7-2
居住地:
投稿: 106
携帯サイト作成時の注意
■ $this->layout = "ajax"; 使用時の注意

モバイルサイトを作っているときにコントローラー側で

$this->layout = 'ajax';

があると notfound になりますので、

views/layouts/mobile/ajax.thtml を作っていれておいてあげると正常に表示できるようになります

■ POSTデータ使用時の注意

これは僕だけでしょうか。POSTデータを送るとき、


<input type="hidden" name="PHPSESSID" value="18342d912fewa55a926502755" />


というのが自然についているのにも関わらずセッションを引き継ぐことができませんでした。

ということで強引に


<form action="/m/logins/add?<?=session_name()."=".session_id();?>" method="post">


という風に action 先にセッションを入れてやりました
hide99
投稿日時: 2007-12-17 17:38
一人前
登録日: 2007-7-2
居住地:
投稿: 106
携帯サイトで $this->flash 振り分け
$this->flash を使っていると携帯サイトもPCサイトも一緒のページが表示されてしまいます。

そこで、携帯ページのときは携帯ページ用の flash を表示させてしまおう!

ということです。

手順1

cake/app_controller.php

<?php
function flash($message$url$pause 1)
    {
        if(
defined('MOBILE')){
            
$url "/m".$url."?".session_name()."=".session_id();
        }
        
        
parent::flash($message,$url,$pause);
    }
?>



手順2

cake/libs/controller/controller.php
618行目あたり flash メソッド を変更

<?php
function flash($message$url$pause 1) {
        
$this->autoRender false;
        
$this->autoLayout false;
        
$this->set('url'$this->base $url);
        
$this->set('message'$message);
        
$this->set('pause'$pause);
        
$this->set('page_title'$message);

        if (
file_exists(VIEWS 'layouts' DS 'flash.thtml')) {
            
            
//カスタマイズ 2007/12/17
            
if(defined('MOBILE')){
                
$flash VIEWS 'layouts/mobile' DS 'flash.thtml';
            } else {
                
$flash VIEWS 'layouts' DS 'flash.thtml';
            }
            
            
        } elseif (
$flash fileExistsInPath(LIBS 'view' DS 'templates' DS "layouts" DS 'flash.thtml')) {
        }
        
$this->render(nullfalse$flash);
    }
?>



これでモバイルだったら
views/layouts/mobile/flash.thtml が表示されるようになります

よって
layouts/mobile/ フォルダに以下のコードを flash.thtml として保存しておきます


<?php
<html>
    <
head>
        <
title><?php echo $page_title?></title>

    </head>

    <body>
        <p>[ mobile用ビュー ] <a href="<?php echo $url?>"><?php echo $message?></a></p>
    </body>
</html>
?>



これでOK!
ちなみに携帯版はreflesh タグが使えないかもしれないんで自動ジャンプはしないようにしてます!
patorash
投稿日時: 2008-6-19 0:10
Baker スタート
登録日: 2008-2-16
居住地: 愛媛県
投稿: 11
携帯サイトで $this->cakeError
CakePHP1.1でPCサイトの携帯対応を行っているのですが、
hide99さんの投稿がとても参考になりました。
ありがとうございました

cakeErrorを起こした場合に、PC用エラー画面が表示されてしまったので以下のようにしたらできました。

app/error.phpを作成し、

<?php
function error($params) {
    
extract($params);
    
$this->controller->base $base;
    
$this->controller->webroot $this->_webroot();
    
$this->controller->viewPath='errors';
    
$this->controller->set(array('code' => $code,
                                
'name' => $name,
                                
'message' => $message,
                                
'title' => $code ' ' $name,
                                
'back' => $back));
    if(
defined('MOBILE')){
        
// webserviceに'Mobile'を指定
        
$this->controller->webservices 'Mobile';
    }
    
$this->controller->render('error404');
    exit();
}
?>

cyndy
投稿日時: 2009-1-20 16:23
Baker ユーザ
登録日: 2008-5-14
居住地:
投稿: 33
Re: 携帯サイトで $this->cakeError
1.1を使用しています。

patorashさんのように携帯用の404エラーページが表示されるようにしたいので、

if(defined('MOBILE')){
$this->controller->viewPath = 'mobile_errors';
$this->controller->webservices = 'Mobile';
}

と、error.php に書いてみました。
が、本当に「ページが見つかりません(404)」と携帯のメッセージが出てしまい、困っております。

views/errors/error404.thtmlではなく、
携帯用の内容にしたいので
views/mobile_errors/error404.thtmlを作成しました。

さらに、layoutを携帯用の views/layout/mobile/default.thtmlにしたいのですが、そうなりません。

$this->controller->webservices = 'Mobile';
を指定しないと、views/mobile_errors/error404.thtmlが表示されるのですが、layoutはPC用の views/layout/default.thtmlになります。

なにかよいヒントありましたら教えてください。


cyndy
投稿日時: 2009-1-20 16:54
Baker ユーザ
登録日: 2008-5-14
居住地:
投稿: 33
Re: 携帯サイトで $this->cakeError
自己解決というか、
webservices がなぜ設定できないのかわからないままで、
携帯用エラーページのときに、携帯用のviews/layouts/mobile/default.thtml のレイアウトを使用できないのかもわからないままなのですが、

とりあえず、

携帯エラーページ用レイアウト
views/layouts/mobile_errors.thtml 
を作成し

error.php に
$this->controller->layout = 'mobile_errors'; としました。

以上です。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .