• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セッションに関して質問が御座います、)

セッションを使い分けるための方法に関する質問

このQ&Aのポイント
  • セッションを使い分けるための方法について質問があります。現在、ログイン関係のプログラムのテストをPHPで行っています。
  • (1) クッキーが使えるか判断し、使える場合は通常のセッションをスタートさせます。
  • (2) クッキーが使えない場合は40桁のランダムな値をセッションIDとしてセッションをスタートさせます。しかし、この方法でセッションに値を入れたり取得したりすると上手く動作しません。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

> (2)クッキーが使えない場合は40桁の0~9、a~b、A~Bの > 乱数を生成してセッションIDとしてセッションスタート。  なぜCookieが使えない場合にセッションIDを自分で作成しているのかな? Cookieの変わりにレスポンスボディとGET(index.php?PHPSESSID=asdfiemfixahhmcr)やPOST(<input type=hidden name="PHPSESSID" value="asdfiemfixahhmcr">)を使ってセッションIDをやりとりすれば良いだけでは?  でないと、Cookie使えないブラウザからアクセス→Cookie使えないと判断→セッションIDを自作してsession_start()→レスポンスでIDをブラウザに返す→同ブラウザから次のアクセス→Cookie使えないと判断→セッションIDを自作してsession_start()のループになってしまうよね。  そもそもCookieが使えない事とセッションIDを自作するかしないかは話として関連性が無いと思うのだが・・・・。 > 同時にセッションに値を入れてセッションIDをGETで送信、  GETで送信? レスポンスじゃなくて? > 受け取り側ではGETでセッションIDを受け取ってそのIDで > セッションスタートするのですがセッションに入れた値が > 上手く取れません、恐らく空になっていると思われます。  セッションIDをセットしてるとことセッションをスタートする所のロジックを見せてくれる? ロジック中で使用している変数名もできればごまかさずに。  なんかね、受け取り側(受け取り側っていうのはindex.php→top.phpのtop.phpの方という意味だよね?)で session_start(); session_id($_GET['mysessionid']); ってしているような気がするんだよ。つまり、順番が逆。

ag_noise
質問者

お礼

文字制限により説明不足になり理解不能な事を言ってすいません、 >なぜCookieが使えない場合にセッションIDを自分で作成しているのかな? この一言で寝ぼけた頭が覚めました! Cookieを使えないのだからセッションIDを自分で指定してセッションをスタートさせないといけないと思ってましたが よく考えたらCookieが使えても使えなくてもセッションはスタートするんですよね?(汗 重要なのはCookie以外の方法で以降セッションIDの受け渡しをする事ですよね? この「以降」が重要ですね…勘違いしてましたm(_ _)m >GETで送信? レスポンスじゃなくて? 説明不足でごめんなさいm(_ _)m 入力画面→処理→入力画面に戻る→アンカーでセッションIDをGET送信→GETでセッションIDを受け取り値を表示 上記のような流れなのでGET送信なのです。 ロジックに関してですがPHP4ながらオブジェクト指向を目指して製作したので一部を見ただけでは判断は難しいと思います。 お見せしたいのですが関連性のある個所だけでもいくつかのクラスに分かれており投稿の文字制限に引っかかってしまいます。 session_start(); session_id($_GET['mysessionid']); に関してですがその辺りは問題ありません、事実、セッションID自体の受け渡し&表示は問題なく行えています。 >session_start()のループになってしまうよね。 それです、先ほどから何回かテストを行ったのですが自分的に問題個所が判明しました。 入力画面を開いた瞬間にコンストラクタがセッションを開始しちゃっているのを忘れてました(汗 そのセッションに値を入れる→新しくセッションを作る→以降は想定通りの動作っというようになってたみたいです(汗 もともとはJavaを使ってまして最近PHPに引っ越してきました、PHP4はオブジェクト指向と呼べる程の代物ではないと思うのですが それでもクラス単位で設計、テストと称してロジックを中途半端に作ったのが敗因みたいですね(汗 パッケージ、オーバーロード、オーバーライドがあれば馴染めるんですが…、PHP4のクラスはC言語の構造体を彷彿とさせます(汗 anmochiさんのおかげで色々な意味で目が覚めました! 初心に返りもう一回勉強&整理&ロジックの検証を行いたいと思いますm(_ _)m

関連するQ&A