[PHP-users 8263] Re: $_SESSIONの使い方( 少し長文)

Morikawa [encore-ann] php-users@php.gr.jp
Tue, 25 Jun 2002 13:29:05 +0900


もりかわ esepg です。

> //セッションを開始/復帰
> --- snip ---
> 処理終了

すいません、思いっきり無意味な引用になって。。。
上記でよろしいかと思います。
あとセッションを明示的に破棄するタイミングがあるのなら
破棄させればよいですし。

> $_SESSIONにストアするということは、セッションファイルに書き込まれ、セッショ
> ンの1サイクルが完了するということですか?

セッションの1サイクルは生成から破棄まで、かなあ。。。
$_SESSIONにストアするってのは保存するわけなので、次のアクションに
引き継ぐ準備をしてるわけで。。。
# 捉え方・言い方の問題かも。

余計なお世話かもしれませんが、
非常に大雑把にセッションを説明すると、「セッションファイルに
書き込まれ」たということがセッションという概念そのものになりますね。

左のようにサーバに対するコネクションはそもそも個別のものなので、

        A ---> |-------|      A(a) ---> |-------|
        B ---> |server |      B(a) ---> |server |
        C ---> |-------|      C(a) ---> |-------|

もし ABCが一連の流れだったとしても原理的には何のつながりもない
ことになります。それを同じ接続と見立てる仕組みがセッションなので、
右のように同じ(a)というIDを振って管理しているわけです。
#それをどのように実装するかは実装次第。
#その実装された手段の使い方がマニュアルに載っていると。

上の図の場合、 $hist の値を 左側の図の A が持っていても、
B の $hist が A の $hist と同じかどうかは分かりません。
AだろうとBだろうと$hist があればとにかくいいんだ!という
場合は別ですが、Aの $hist と B の $hist で何らかの関係を
持たせたい場合はどうしても A(a), B(a) というようにしないと
いけません。
そうすると'a' というIDがある間は A(a) と B(a) が同じ 'a' 
なので一連の流れに繋がるわけです。

ということで、B(a) の直後に'a' を消してやれば、C については
A(a)<-->B(a) の繋がりからはどうでもよいことになります。
つまり、セッションを破棄するわけです。

破棄しなければ C(a) がちゃんと'a'を持ってくるので、C(a) の
持っている $hist と B(a) が繋がることになります。
# もちろん、回復する(繋げる)ために session_start() せよ、
# と書いてあります。

ちなみに、'a' はPHPのセッション機能が管理してくれます。
これは古い記述方法でも新しい記述方法でも基本的に同じです。
'a' というIDに関連させる $hist の扱い方が違うだけ。
# あ、あと破棄の仕方もか。

「$_SESSIONにストア」する、というのが'a'に関連させる方法ですね。

呑みでいうと、register_globals が有効な場合は変数というボトル
で配ってくれたのが、register_globals を無効にすると、$_SESSION 
という樽に入れてもってきてやるから後は勝手に注げ!みたいな感じ
っすか。当然回収も各ボトルの回収と樽の回収ぐらい違う。。。
# ぜんぜん違う!?(^^;


> それからちょっとテストしてみて
> ・ウィンドウを別に新しく開いて実行した場合は同じセッションとなる
> ・ブラウザを一旦閉じて再度実行すると別セッションとなる
> という認識なのですが、これでよいのでしょうか。

うーん、各論ありそうな。。。(仕様の段階の話ですね)
「ブラウザがフリーズしたのでやり直しってのはかなわん」という場合も
あれば、そうでない場合もあります。

このスレッドのセッションはPHPに装備されているセッション管理機能を
使っての話であって、独自にDBやrand()からセッションを管理するものを
つくっても構わないわけです。

まあ、今回の状況ではそのように動作するようになっているということ
ではありますが。

ということで、一般的にセッションというならば、上の認識ではあまり
よろしくないかと思われます。

ありゃー、結構長くなってしまいました。

もりかわ [ENCORE|ANN]
プログラマ募集: http://it.encore-ann.com/about_rec.php