[PHP-users 13963] Re: 携帯のブラウザでセッション設定について

Hideo NAKAMITSU php-users@php.gr.jp
Fri, 14 Mar 2003 00:05:09 +0900


中満です.

On Thu, 13 Mar 2003 23:25:19 +0900 (JST)
Ken <ken_ne_jp2001@yahoo.co.jp> wrote:

すみません.あまりスレッドを読んでいなかったのですが.

> ここのPHPの情報交換は、初級者では難しいのでしょうか?

そんなことは無いと思います.

> 私がショッピングサイトを作る場合、session_registerを使い
> 、ブラウザに記憶させる事しか分かりません。
> セッションが使えない状況でどのようにショッピングサイトを
> 作ればよいのか分からないのが今の私のレベルなのです。
> できれば、ソースの例などを書き込んでいただけないでしょう
> か?
> できる方にとっては、言葉でちょっと言えばすぐ理解できる事
> かもしれませんが、私はソースの例などないと分かりません。
> すみませんが、ソースの例が分かる方は、教えて頂けないでし
> ょうか?
> 宜しくお願い致します。
> 
> この課題が解決した場合、ソースと説明をまとめてみたいと思
> っています。

GETメソッドであれば毎回
url?session=固有の値
POSTメソッドであれば毎回
<input type="hidden" name="session" value="固有の値">
を持たせることでセッションもどきが使えるかと思います.

# 固有な値は md5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']);
など適当なものを代用してください.
例えば今回は発行した値が"d41d8cd98f00b204e9800998ecf8427e"だとします.

1. ログインが成功したら,上記の固有な値を発行し,URLやhiddenタグとして渡します.
2. 同時に/tmp/d41d8cd98f00b204e9800998ecf8427eを作成し,その中にユーザ情報を
   格納します.
3. ページの遷移が起こっても$_POST['session']や$_GET['session']によって必ず
   d41d8cd98f00b204e9800998ecf8427eという値を渡すことで,/tmp以下の
   ファイルの有無が分かるため,存在すればデータを読み込み変数として利用します.
4. ショッピングカートが押された場合などは/tmp/d41d8cd98f00b204e9800998ecf8427e
   を編集します.
5. 3,4の繰り返し

ファイルが存在しなければログイン失敗で値をもう一度再発行します.

### ログインページ
<?php
//
ここはログイン処理
//
if (!$_GET['session'] && !$_POST['session']) {
 $session = md5("時刻とかIPアドレス");
}
?>
<a href="next.php?session=<?= $session ?>">next</a>
// POSTメソッドの場合は
// <input type="hidden" name="session" value="<?= $session ?>">

### next.php
if ($_GET['session'] || $_POST['session']) {
  /*
  /tmp/$_GET['session']や /tmp/$_POST['session']ファイルをオープンし
  現在の値を読み込む.カートボタンが押された場合などは/tmp以下のファイルに
  書き込んだり,煮るなり焼くなり・・・
  */
}

この繰り返しでいけるはずです.

ただし,一度変なところに飛ばれてしまうとセッションがキャンセルされるのと,
正常にログアウトされなかった場合,/tmp以下の一時ファイルをどうやって削除するか
がちょっとした難点ではあります.

かなり適当ですが,こんな感じで良いでしょうか?

/* -----------------------------------
Hideo NAKAMITSU <nomo@bluecoara.net>
http://solaris.bluecoara.net/
----------------------------------- */