携帯サイトでsession(セッション)を使う方法
- php
- | トラックバック(0)
- | コメント(0)
通常、session_start()するとクッキーにセッションIDが発行され、次回アクセスした時にクッキーの中にセッションIDがあれば、セッションを読み込んでデータを保持できる。しかしPCと違い、携帯ではcookie(クッキー)が使えない機種がある。通常の方法では携帯でセッションが使えないのだ。
これを解決する方法としてURLにセッションIDを埋め込むという方法がある。クッキーではなくGETやPOSTでセッションIDを持ちまわすのである。ただ、全てのリンクやフォームタグにセッションIDを埋め込むのは骨が折れるだろう。そういう時はphp.iniのsession.use_trans_sidをOnにすればいい。そうすると自動的に全ての相対リンクにセッションIDが埋め込まれる。
しかし、PCと携帯と同じスクリプトで動かしている場合、PCでもセッションIDが埋め込まれてしまうとセッションIDが丸見えになってしまう。(携帯でも見えてしまうけど、PCほど問題にはならないと思う)そのような場合は以下のようなスクリプトで対応する。
// セッションスタート
session_start();
// セッション名取得
$S_TAG = strip_tags(SID);
list( $S_NAME, $S_ID ) = explode("=",$S_TAG);
// セッションクリア
if (!$_COOKIE[$S_NAME] && !$_POST[$S_NAME] && !$_GET[$S_NAME]) {
$_SESSION = array();
}
・
・
・
// セッション持ちまわし
if( !$_COOKIE[$S_NAME] ){
$keitai_html_buf = preg_replace( "/(href=\"[^>\?\":]*)\?([^>\?\"]*\"[^>\?\"]*>)/i", "$1?$S_TAG&$2", $keitai_html_buf );
$keitai_html_buf = preg_replace( "/(href=\"[^>\?\":]*)(\"[^>\?\"]*>)/i", "$1?$S_TAG$2", $keitai_html_buf );
$keitai_html_buf = preg_replace( "/<form[^>]*>/i", "$0<input type=\"hidden\" name=\"$S_NAME\" value=\"$S_ID\">", $keitai_html_buf );
}
// 携帯用HTML表示
header("content-type: text/html");
header("Content-Length: ". strlen($keitai_html_buf));
echo $keitai_html_buf;
exit;
-----------------------------------------------------------
DoCoMo(ドコモ)のFOMAでは、上のプログラムでうまく動作しないことが分かった。以下のように修正。
// セッション持ちまわし
if( $_COOKIE[$S_NAME] != $S_ID ){
$keitai_html_buf = preg_replace( "/(href=\"[^>\?\":]*)\?([^>\?\"]*\"[^>\?\"]*>)/i", "$1?$S_TAG&$2", $keitai_html_buf );
$keitai_html_buf = preg_replace( "/(href=\"[^>\?\":]*)(\"[^>\?\"]*>)/i", "$1?$S_TAG$2", $keitai_html_buf );
$keitai_html_buf = preg_replace( "/<form[^>]*>/i", "$0<input type=\"hidden\" name=\"$S_NAME\" value=\"$S_ID\">", $keitai_html_buf );
}
session_start();
// セッション名取得
$S_TAG = strip_tags(SID);
list( $S_NAME, $S_ID ) = explode("=",$S_TAG);
// セッションクリア
if (!$_COOKIE[$S_NAME] && !$_POST[$S_NAME] && !$_GET[$S_NAME]) {
$_SESSION = array();
}
・
・
・
// セッション持ちまわし
if( !$_COOKIE[$S_NAME] ){
$keitai_html_buf = preg_replace( "/(href=\"[^>\?\":]*)\?([^>\?\"]*\"[^>\?\"]*>)/i", "$1?$S_TAG&$2", $keitai_html_buf );
$keitai_html_buf = preg_replace( "/(href=\"[^>\?\":]*)(\"[^>\?\"]*>)/i", "$1?$S_TAG$2", $keitai_html_buf );
$keitai_html_buf = preg_replace( "/<form[^>]*>/i", "$0<input type=\"hidden\" name=\"$S_NAME\" value=\"$S_ID\">", $keitai_html_buf );
}
// 携帯用HTML表示
header("content-type: text/html");
header("Content-Length: ". strlen($keitai_html_buf));
echo $keitai_html_buf;
exit;
-----------------------------------------------------------
DoCoMo(ドコモ)のFOMAでは、上のプログラムでうまく動作しないことが分かった。以下のように修正。
// セッション持ちまわし
if( $_COOKIE[$S_NAME] != $S_ID ){
$keitai_html_buf = preg_replace( "/(href=\"[^>\?\":]*)\?([^>\?\"]*\"[^>\?\"]*>)/i", "$1?$S_TAG&$2", $keitai_html_buf );
$keitai_html_buf = preg_replace( "/(href=\"[^>\?\":]*)(\"[^>\?\"]*>)/i", "$1?$S_TAG$2", $keitai_html_buf );
$keitai_html_buf = preg_replace( "/<form[^>]*>/i", "$0<input type=\"hidden\" name=\"$S_NAME\" value=\"$S_ID\">", $keitai_html_buf );
}
- [2006/01/26 15:03]
- php |
- トラックバック(0) |
- コメント(0)
- この記事のURL |
- TOP ▲
トラックバック
この記事のトラックバックURL
http://shotets.blog21.fc2.com/tb.php/24-10a6b057
- | HOME |


コメントの投稿