激凹みから立ち直る方法

いつもお世話になっております。

php&mysqlにて会員制サイトを作成中です。
sessionを用いて期待する動作は実現できたのですが、どうしても理解できないことがあります。

sessionについて色々と調べますと、
1)サーバーサイドで処理する方式(URIに埋め込む)
2)クライアントサイドで処理する方式(cookieに渡す)
となっております。

ところが、
作成中のサイトでは、cookieを利用していないのですが、URIにも何も付加されていません。
それでも、ログイン・ログオフ状態はそれぞれ望む通りに表示されています。

これは一体どういうことなのか、お分かりになる方がいらっしゃいましたらご回答をお願い致します。

以下に大まかなコードを。

ログイン直後のページ
session_start();
session_unset();

if(!isset($_SESSION["user_session"])){
session_register("user_session");
$_SESSION["user_session"]=$hoge;
}

その他のページ
session_start();

$hoge=$_SESSION["user_session"];
if(!empty($hoge)){
echo "ログインしてません";
}else{
echo "ログインしてます";
}

以上のようなものです。

マイページはIDとパスワードで認証しており、本人以外は見ることができないのですが、その他のページはログインすれば誰でも見ることができるようになっています。

現段階で特に暗号化などの処理は施しておりませんが、セキュリティー関連は今後の作業として予定しております。

個人サイトを作り始めて半年で、色々と不勉強な部分、理解が不十分な部分がございます。
分かりやすく説明いただけると助かります。

A 回答 (1件)

文面を見る限り、$_SESSION変数の概念が理解されてないのかな、と思われます。

もし私の認識違いでしたらすみません。

$_SESSIONという変数が、サーバサイドでクッキーの役割をしてくれる、と思ってもらってよいかと思います。
私が知る限り「画面遷移しても一定の変数=値を保持し続ける」方法として
・サーバサイドで処理するURI(?in_ymd=20080225&kbn=1 など)
・クライアントのクッキーに渡す
・サーバサイドの$_SESSION変数を使用する
の3種類があります。
ソースを拝見する限り、3番目の$_SESSION変数を利用してうまくセッションが確立されているかと思います。cookieを利用していなく、URIにも何も付加されていなく、「どうしてなんだろう?」と思われるということはセキュリティ的にもOKではないかと思います。URLに平文で表示されては危険ですからね。
$_SESSION変数は上手に使うと効果的です。いろいろな場所で使用することを見越し、場面場面でクリアしやすい2次元連想配列($_SESSION['auth']['login_id']のように)にすることをおすすめします。
また認証情報だけでなく、Form入力値の受け渡しにも利用できます。
ちなみに$_SESSION変数には有効保持時間があります(確かデフォルトで25分ほど)。無操作で30くらい放置すると、自動クリアされます。
いずれにしても$_SESSION変数を使用することが常道となってますので、知らず知らずのうちに、マスターされてしまったのかな、と思います。
    • good
    • 0
この回答へのお礼

お礼が遅くなり、大変失礼致しました。

ご指摘の通り、$_SESSION変数に対する理解不足でした。
質問文中にて触れた2つの方式ではなく、$_SESSIONはサーバーサイドで変数を保持できるものだったのですね。
2次元連想配列についても調べて活用してみたいと思います。

これでユーザー管理ができそうです。
本当にありがとうございました。

あ、質問文中の「ログインしてます」「ログインしてません」は逆でした。すみません^^;

お礼日時:2008/02/28 06:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!