PHPのセッションでわからないことがあります。
例えば、ユーザーが商品検索すると関連商品の検索結果一覧が出るサイトがあり、
検索結果の一つをクリックして詳細ページへ飛ぶとします。
詳細ページで戻るを押せば、検索結果一覧ページへと戻ります。
これは具体的にセッションをどのように使っているのでしょうか?
仮に検索ページをsearch.php、結果一覧ページをresult.php、詳細ページをdetail.php
とすると、detail.phpで
<a href="result.php">戻る</a>
としてもサーバーは同じ人なのか判別できずに、前の検索結果一覧は表示しませんよね?
値をセッション変数に入れて、ページ遷移しても値を共有できる(?)のは理解できるのですが、戻るボタンのようにページ全体ではよくわかりません。
具体的な仕組みを教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
戻るボタンで戻った際に元のページが再現されるのは、セッションの機能ではなく、ブラウザのキャッシュ機能によるものです。
ただし、戻った上でリロードをすると、ブラウザのキャッシュではなく、リクエストが再びサーバーに送られてその結果が表示されます。その場合も、ブラウザからのリクエストはブラウザが覚えている内容が送信されます。リクエストが同じなので、レスポンス(表示)も通常は前と同じものが表示されるというわけです。このあたりは、セッションを使っていようが、他の方法を使っていようが、変わりません。
投稿2017/09/12 22:51
総合スコア11705
0
セッションの管理方法はいくつか方法があります。
まず、セッションIDの渡し方は下記のような方法があります。セッションIDは、クライアントサイドのブラウザとサーバーサイドのPHPを結びつけるユニークIDです。利便性は別問題として、ブラウザとPHPが通信できる手段であればすべて可能になります。
- Cookieで渡す
- URLクエリストリングとしてセッションIDを渡す
- セッションIDをPOSTして渡す(現実的ではないですが)
- セッションIDをJavaScriptのAjax非同期通信で渡す(これもあまり現実的ではありません)
そして、セッションの値には下記のような管理方法があります。
A. サーバー側にセッションの値をファイルに保存
B. DBにセッションの値を保存
C. Cookieにセッションの値を保存
一般的に初期設定では「1.CookieにセッションIDを保存して、A.サーバー側にセッション値をファイルに保存」の方法が使われています。
初期設定でセッションファイルは「/tmp」に保存されます。どれかのセッションファイルを下記のように表示してみるとわかりやすいかと思います。(変更してある場合は適宜読み替えてください)
bash
1ls -al /tmp 2less /tmp/セッションファイル名
仮に検索ページをsearch.php、結果一覧ページをresult.php、詳細ページをdetail.php
とすると、detail.phpで
<a href="result.php">戻る</a>
としてもサーバーは同じ人なのか判別できずに、前の検索結果一覧は表示しませんよね?
下記のようにセッションを開始すれば、セッションをどのページでも使うことができます。セッションIDをCookieに保存している場合は、このCookieが破棄されない限りいつまでも有効
です。
php
1session_start(); 2$key = $_SESSION['key'];
値をセッション変数に入れて、ページ遷移しても値を共有できる(?)のは理解できるのですが、戻るボタンのようにページ全体ではよくわかりません。
セッションIDがCookieに保存されている場合は下記のような流れになります。
- [
戻るリンク
]クリック - リンクページをサーバーにリクエスト
- CookieからセッションIDを取得
- セッションIDからセッションファイルをロードしてセッション開始
セッションIDをクエリストリングで渡す場合は、下記のように3.
が下記のようになります。
3.クエリストリングからセッションIDを取得
投稿2017/09/12 18:46
総合スコア1652
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/13 07:52
2017/09/13 11:53
2017/09/13 17:03
2017/09/13 22:17
2017/09/16 15:48