お世話になります。
現在セッションを使用してのPHPプログラムのコーディングに取り組んでおりますが、
なんとなくですがセッションのことはつかめつつあります。
そこで、基本的な質問になるのですが教えてください。
1.セッションは必ず破棄しないといけないのか。
私の想像としては、一定時間(20分くらいだったような…)またはブラウザを閉じたときにセッションが破棄されるものと思っていました。
ですが、ある掲示板で
「セッションが不要になった段階でセッションを破棄してください。
これをしないとサーバ上にセッションデータ(ファイル)がたまっていきます。」
という記述を見つけました。
必ずセッションというものは破棄しないといけないのでしょうか。
No.2
- 回答日時:
セッションとはセッションIDのことなのか、セッションに保存されているデータのことなのかをもう一度、考えてみてもいいかもしれません。
もし、明示的にセッションに保存したデータがいらないとわかったのならば、そのデータは削除しておくほうがいいです。
セッションIDそのものは別に削除しなくてもいいかもしれませんが、
こちらも削除したほうがいいですね。しかし運用状況においてはsession_destoryだけでは物足りない場合もあります。(レンタルサーバーをお使いなら、おそらく問題ないとは思います。)
現段階としては、不要なデータは残さない。
という方針でやっていけば間違いないと思いますが、
セッションデータの削除をより確実にしたいのならば
session_destroy()を行う前に、
$_SESSION = array();
setcookie(session_name(), '', time()-42000, '/');
などをやっておくとより確実です。
説明がへたで申し訳ありません。
ありがとうございます。
セッションとセッションIDのことを指摘されてはっとしました。
一緒に考えていましたので、ご指摘いただけてよかったです。
やはり、明示的に削除したほうがいいのですね。
>$_SESSION = array();
>setcookie(session_name(), '', time()-42000, '/');
これはたしかに確実ですね!
早速利用させていただきます、勉強になりました。ありがとうございました!
No.1ベストアンサー
- 回答日時:
myaa_myuさん、こんにちは。
> 1.セッションは必ず破棄しないといけないのか。
私の想像としては、一定時間(20分くらいだったような…)またはブラウザを閉じたときにセッションが破棄されるものと思っていました。
> ですが、ある掲示板で
>
> 「セッションが不要になった段階でセッションを破棄してください。
> これをしないとサーバ上にセッションデータ(ファイル)がたまっていきます。」
>
> という記述を見つけました。
> 必ずセッションというものは破棄しないといけないのでしょうか。
以前、私が書き込んだ内容ですね。
誤解を招いたようで申し訳ありません。
セッションを破棄しなければ、セッションファイルがサーバ上に削除されないで
どんどん蓄積されていくわけではありません。
myaa_myuさんのおっしゃるように設定により、たまったセッションファイルを
自動で削除されます。
session.gc_maxlifetime = 1440
ここで設定された秒数により、自動でセッションを破棄するまでの時間が決まります。
初期値は1440となっているので24分です。
私がスクリプト(session_destroy())によりセッションを破棄することをすすめたのは、
・セキュリティの面
・ごみをためないため(無駄なものは確実に消す)
といった意味です。
私も詳しいわけではないので間違っているかもしれませんが、
[デフォルト]
session.gc_probability = 1(分子)
session.gc_divisor = 100(分母)
session.gc_probability / session.gc_divisor の確立でガーベッジコネクションが実行されるとあるので、
24分で確実にセッションが自動で破棄されるわけではなく、
24分で1%の確立でセッションが自動で破棄されるという意味だと思います。
また、
[デフォルト]
session.save_path = "/tmp"
セッションデータを保存するパスですが、
「パスの深さが2より大きい場合、ガーベッジコレクションは行われません。」
とマニュアルにあるので、
/tmp/tmp2/tmp3 となっていると自動での破棄を行わなくなる
という意味だと思います。
なので、設定で大きく左右されるので頼りっきりにするのではなく、
自分自身で必要がなくなったと判断した時点で削除するというようにした方がよいと思っています。
私のマニュアルの解釈が間違っているかもしれませんので、
私自身、詳しい方のご意見を伺いたいです^^;
【参考】
http://jp.php.net/manual/ja/ref.session.php
http://www.stackasterisk.jp/tech/php/php03_06.js …
http://www.hizlab.net/app/portal.html
ご丁寧に詳しくお教えいただきまして光栄です。ありがとうございます!
参考URLもたくさん教えていただきまして、ありがとうございます!
セッションが破棄されるのは24分、けれどそれは1パーセントの確立ということは、ほとんどが破棄されない、と…!これは驚きです。
これから作成するプログラムでは明示的にセッションを破棄するように心がけます。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPのセッション有効期限について 5 2023/06/14 12:40
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
- PHP 「ログイン機能を持たせる」説明が気難しいです。 2 2022/10/11 02:59
- その他(ゲーム) ファイナルファンタジー7リメイクのnormalクリア後のセッションセレクトについて。 セッションを自 2 2023/04/11 16:52
- Google Drive 会社への勤怠届出にGoogleフォームを使用しています。 しかし、最近何故か『このサービスはビジター 2 2022/12/05 00:21
- PHP PHP でメールフォームを作成したい 1 2022/05/04 22:28
- Chrome(クローム) GoogleChrome閉じるたびにアンケート続行できない表示が出る。 1 2023/08/13 13:53
- ジャズ ピアノとピアノを同時に弾いて奏でる事をなんと呼ぶんでしたっけ?セッションしか出てこず… 1 2022/09/19 07:54
- 楽器・演奏 ピアノやってる人っていきなりギターとかとセッション出来ないって聞いたのだけれどそうなの? 6 2023/05/19 07:41
- 競馬 今日の弥生賞は➉グリューネグリーンの1着でしょうか? 1 2023/03/05 08:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SESSION情報は、ブラウザを起動...
-
セッション中に有効期限切れの...
-
ブラウザを閉じた後もセッショ...
-
共用サーバでのセッション管理...
-
リアルタイムカウンター
-
PHPのセッション有効期限について
-
URLのパラメータをGETのままで...
-
session_start()で生成されるセ...
-
Sessionの上限について
-
データベースを使用したWebアプ...
-
セッション ID とセッション名...
-
POSTで情報を他のサーバーに渡...
-
【PHP】SESSION変数の競合を...
-
!issetの冒頭の!ビックリマー...
-
Dosブロンプトでtabを出力したい
-
Yahoo! JAPAN IDを新規取得でき...
-
DTOとEntityの差は何ですか。
-
shシェルスクリプト 空白行の...
-
switch()文で値の大小比較
-
wordの差し込み印刷で文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLのパラメータをGETのままで...
-
PHPのセッション有効期限について
-
PHPのセッションについて
-
ブラウザを閉じた後もセッショ...
-
Sessionの上限について
-
$_SESSIONと、POSTやGETの違い
-
ログインしたら他からログイン...
-
複数のサーバで運営する場合の...
-
301リダイレクトはセッション引...
-
「戻る」ボタンで値の保持
-
セッションのスコープ(有効範...
-
セッション ID とセッション名...
-
ログイン画面をはさんだ後、自...
-
session_start()で生成されるセ...
-
管理者としてログイン
-
セッション変数にパスワードを...
-
セッションを維持したまま、サ...
-
PHP cookieの値が更新されない...
-
セッションが正しく更新されな...
-
POSTで情報を他のサーバーに渡...
おすすめ情報