- ベストアンサー
セッションの仕組み
php初心者です セッションの仕組みを教えてください 質問1 セッションidとセッションクッキーは同じものですか? 質問2 セッションidやセッションクッキーはデフォルトでは、ブラウザを閉じた時に削除されますか? 質問3 レンタルサーバーのphp.iniを調べてみたところ 保存場所がsession.save_path no valueでした。この場合、訪問者のパソコンにクッキーが保存されてしまうのでしょうか?サーバーに保存する方法はありますか? 質問3 session_start();でセッションを開始したときセッションidが自動で付けられるのはわかりましたが、 セッションid(MD5で作られた数字)の使い道がわかりません 質問4 セッションidはどこに利用すればいいのでしょうか? session_start(); session_id(); //このセッションidの利用方法がわかりません $_SESSION['id'] = $_POST['id']; よろしくお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> セッション変数でログインしているか判定している場合は、セッションidは使用しなくてもいいのでしょうか? 「既にsession_startを実行したかどうか」を確かめるためだけに使います。 正直言って自分が書いたコードならばどこで実行したかぐらい把握しているのが普通なので、ほとんどこの関数の出番は無いでしょう。ログイン状態の有無は関係ありません。 ログイン状態の有無は if (!isset($_SESSION['logined'])) { die('ログインせずにこのページは閲覧できません'); } などとしてください。
その他の回答 (2)
【回答1】 session_start()でセッションを開始すると、 名前がsession_name()、値がsession_id()のクッキーが発行され、 PHPは以降これをもとにリモートを識別し、スクリプト側に$_SESSION変数の提供を行います。 「セッションID=セッションクッキー(の値)」で誤りありません。 【回答2】 デフォルトではそうなっています。変更することが可能です。 http://pentan.info/php/session_gc.html 【回答3】 NoValueのときは勝手に場所を決められるみたいです。 http://sinsengumi.net/blog/2010/09/php-ini%E3%81%A7session-save_path%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%AA%E3%81%84%EF%BC%88no-value%EF%BC%89%E3%81%A8%E3%81%A9%E3%81%86%E3%81%AA%E3%82%8B%E3%81%8B%EF%BC%9F/ セッションの仕組みから考えて、セッション変数の中身がリモートに保存されることは絶対にあり得ません。 保存されるのはセッションクッキーのみです。 【回答4】 session_name()はデフォルトでは「PHPSESSID」固定です。変更する必要は特にありません。 session_id()はsession_start()直前に自動的に決定されるので、これもあなたが操作する必要はありません。 意図的に他人のセッションを乗っ取るようなことを行いたい場合、その人のセッションIDを$idとすると、 session_start()より前にsession_id($id)としておけばそれが可能になります。しかし通常はこのようなことは行いません。 個人的にsession_id()はセッションが開始されているかどうかの判定に使うぐらいだと思います。 function is_session_started() { return session_id() !== ''; }
お礼
回答ありがとうございます セッション変数でログインしているか判定している場合は、セッションidは使用しなくてもいいのでしょうか?
- neko-ten
- ベストアンサー率55% (1287/2335)
1) セッションクッキーにセッションIDが書かれてるってことです。 IDとCookieだから別物だけど、cookieの中身はsessionIDです。 2) 設定によりけり。 cookieなんで、ブラウザで設定ができるとそれが優先されます。 3) そもそもcookieはブラウザがローカルに保存するもんですから、サーバにというのはありえません。 sessionはこのsessionIDをもとにPHP側の変数処理しますから、PCに保存しなければ意味がないです。 3) 別にsessionIDをPHPでごりごり使うことってあまりないです。 cookieやらでsessionIDをPHPに渡してやれば、PHPはそれをもとにデータよんでくるだけです。 4) session_id()に関しては、cookieが無効な場合などにsessionを使うときに、sessionIDをGETなどのメソッドを使ってやりとりするときに使います。 一般的にはGET使ってURLに埋め込みますが、cookie使ったほうがいいです。cookieを使ってる場合はsession_id()は使いません。 あとはcookieが死んだあとに再度呼び出したいとか変な使い方はあるかも。普通はしないけど・・・。 本来であれば、sessionID入ってるcookieが死ぬ状態になったら$_SESSIONは破棄するべきですし。 なお、 >$_SESSION['id'] = $_POST['id']; この部分は別にsessionIDを何かしてるわけじゃないです。 $_SESSION["id"]って要素の中にPOSTで送られてきたIDの中身を入れてるだけです。 sessionIDを明示的に指定するならsessin_id()を使います。 値としてsessionIDを入れてやれば、明示的にID指定ができます。 sessionは、ユニークなsessionIDに紐づいたデータをサーバに保存する機能です。 この保存したデータを読み出す場合には、紐づけ元のsessionIDが必要。 でも、HTTPでは基本リクエストごとに通信は切れますから、そのままだと毎アクセスごとに内容が変わります。というか一意性を保持できません。 そのため、クライアント側にsessionIDというユニークな値を保持させておき、接続毎にその値をもとにサーバ側で保存してあるデータを呼び出してくるわけです。 sessionIDを使って何かするってことは普通ないです。
お礼
回答ありがとうございます セッション変数でログインしているか判定している場合は、セッションidは使用しなくてもいいのでしょうか?
お礼
回答ありがとうございました すっきりしました