[PHP-users 1079] Re: session 管理と i-mode(J-PHONE)
Y.Okazaki
php-users@php.gr.jp
Mon, 06 Aug 2001 09:09:56 +0900
岡崎@Momoです。
携帯電話のセッション管理は以下のようにやっています。
ログインの際に、session_makeを動かします。
すべてのリンクに「/jp234ra0fgslmr23」などというIDを付加して
各ページでsession_checkを動かしています。
# PHP初めて数週間のもので最適化されていませんので参考にならなかったらごめんなさい。
----------------------------------------------------------------------
$db = 'php';
$defexp = 30 * 60;
$url = 'http://192.168.1.10/test/';
////////////////////////////////////////////////
/// データベース接続
////////////////////////////////////////////////
function db_connect() {
global $db;
if(! mysql_connect("localhost","root")){error("データベースに接続できませんでした");}
if(! mysql_select_db($db)){error("データベース接続に失敗しました");}
}
////////////////////////////////////////////////
/// セッションID発行
////////////////////////////////////////////////
function session_make($id) {
global $defexp, $PHP_SELF, $REMOTE_ADDR;
$exp = date("Y-m-d H:i:s",time() + $defexp);
$list = array(1,2,3,4,5,6,7,8,9,
a,b,c,d,e,f,g,h,i,j,k,m,n,p,q,r,s,t,u,v,w,x,y,z,
A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z);
$j = count($list);
srand((double)microtime()*1000000);
for($i=0;$i<16;$i++){$str .= $list[rand(0,$j)];}
$qstr = "insert into session values ('$str','$exp','$PHP_SELF','$REMOTE_ADDR','$id')";
if(! mysql_query($qstr)){error('セッション管理ができませんでした');}
return $str;
}
////////////////////////////////////////////////
/// セッションチェック
////////////////////////////////////////////////
//
// セッションIDから、会員ID・氏名などを返す
//
function session_check($path_info) {
global $defexp, $url;
$exp = date("Y-m-d H:i:s",time() + $defexp);
if($path_info == ""){error('不正なアクセスがありました');}
$pi = split("/",$path_info);
$sid = $pi[count($pi)-1];
db_connect();
$qstr = "select mem.code, mem.name from mem, session "
. "where session.id = '$sid' and session.val = mem.code and session.exp > now()";
$r = mysql_query($qstr);
if(! $r || mysql_num_rows($r) != 1){error('<a href="$url/login.phtml">こちら</a>からログインしなおしてください<p>');}
$h = mysql_fetch_array($r);
$qstr = "update session set exp = '$exp' where id = '$sid'";
if(! mysql_query($qstr)){error('セッションIDの更新に失敗しました');}
return array($sid,$h[0],$h[1]);
}
----------------------------------------------------------------------
>但野です。
>
>> 私もPHPのセッション管理にそれほど精通しているわけではありません
>> ので、外しているかもしれませんが、
>> b.phpのsession_start() を外して暗黙のセッション開始にしてみても
>> 動作は同じでしょうか?(同じかも)
>
>結局このようにして見ました。
>a.php:------------------------------------
><?php
> if (!session_id()) {
> session_start();
> }
>?>
>
><html>
><head>
><title> Session Start Page </title>
></head>
>
><body>
><?php
> echo $PHPSESSID;
>?>
><form action="b.php?<?=SID ?>" method="get">
><input type="text" name="item" maxlength="100" >
><?php echo $item; ?>
><br>
><input type="submit">
></form>
></body>
></html>
>
>b.php:------------------------------------
><?php
> if (!session_id()) {
> session_start();
> }
> session_register("item");
>?>
><html>
><head>
><title> Session Regist Page </title>
></head>
>
><body>
><?php
> echo "item = ". $item . "<br>";
> echo "ID=" . $PHPSESSID . "<br>";
>?>
><a href="c.php"> goto c.php </a>
>
></body>
></html>
>b.php:------------------------------------
>
>ここで、b.phpのセッション開始をコメントアウトしても同じでした。
>
>
>> なんか、表示される内容が更新されないのが正常動作に見えるのですが。。。
>
>PCでブラウザでクッキーを受け入れると、戻るボタンを押したときには、
>SIDの値がつかない状態のページになっていますね。
>
>
>> > クッキーを受け入れると、最初の1回目の値のままです。i-mode や J-PHONE
>> > でも同じです。
>>
>> だとすると、i-modeやJ-PHONEでもCookieが効いてる?そんなはずは。。^^;;
>
>ですね。というか、apacheのログを見ていると、PCの場合はクッキーを
>受け入れないと、再度ページのリクエストに行っているようですが、携
>帯の場合は、戻るを押しても、リクエストが来ていないので、PCでクッ
>キーを受け入れたときと同じ動きをするのかもしれません。
># apacheのログを見ると、default.ida?NNNNNN・・・がある〜。
>
>> とゆーか、最初のレスに書いたように携帯電話ブラウザの場合、
>> FORM周りの仕様にいろいろ制限があったり、キャリアに独自の予約変数名
>> があったりするので、端末IDを使用するか、自前で振ったIDを引き継いで
>> いくのが一般的なはずです。
>> 詳しくは言えませんが、少なくともJ-PHONEでPHPのセッション管理
>> 使うのはまずそうです。
>
>携帯はともかくとして、PCの場合は上記のようにブラウザの戻るボタンで
>戻った場合にはどのようにすれば、セッション情報が更新されるのでしょ
>うか。
>php.iniで、クッキーを使わない設定にして見たら、更新されるのですが。
># PCの場合のみ。i-modeはだめでした。パケット代がかさむなぁ。
>
>
>
>
>_______________________________________________
>PHP-users mailing list
>PHP-users@php.gr.jp
>http://ns1.php.gr.jp/mailman/listinfo/php-users
--
Y.Okazaki mailto:okazakim@mmtr.or.jp