ホームページ >バックエンド開発 >PHPチュートリアル >php セッションの gc メカニズムは、window と ununtu では異なります。
Mr_jing の前回のセッション記事を見てとても勉強になりました。偶然にも、勝利時にセッションの問題も発生しました。彼は記事の最後で興味深いことを述べていましたが、それを見たとき、とても甘い運命だと感じました。それから、私は自分自身で比較的水っぽい日記を書きました。session_set_save_handler の実行シーケンスのメカニズムは理解しましたが、それでも諦めるつもりはありませんでした。セッションが Linux で動作するかどうかを確認したかったのです (Win では間違いなく動作しません)。 。
2.php.ini 設定
3. コードはセッションに書き込むために write.php を開始します。値は次のとおりです。現在のタイムスタンプ
<?php session_start();$_SESSION['nametime']=date('Y-m-d H:i:s',time());echo '已经写入'.$sessionSavePath = ini_get('session.save_path');var_dump($_SESSION);
4. セッション コードを読み取ります
<?phpecho 'maxlifetime'. ini_get('session.gc_maxlifetime')."<br>";echo 'gc_probability'.ini_get('session.gc_probability')."<br>";echo 'gc_divisor'.ini_get('session.gc_divisor')."<br>";session_start();echo '<hr>'.'Session::=>';var_dump($_SESSION);echo '<hr>'.'Cookie::=>';var_dump($_COOKIE);echo '<hr>';echo "<br>ReadTime".date('Y-m-d H:i:s',time());
5. read.php
を実行し、書き込み時間が 17:57:04 であることを確認します
17:57:04 です。下の readtime 行は 13:58:56 であることに注意してください
ただし注意:
gc リサイクルは session_start から始まり、open、read、gc の順に実行されます。
詳細については、ここをクリックしてセッションの実行順序を確認できます。
(最初の読み取りに値がある場合、ユーザーがログインしているかどうかを正確に判断できないと考える友人もいるかもしれません。しかし、実際の運用環境では、それは決して単一のユーザーではありません。 session_start メカニズムをトリガーするだけでは十分ではありません。 !
Win プラットフォームで read.php ページを更新し続けると、セッション値を常に取得できます。これはおかしい、リサイクルすべきだ。どうしてずっと手に入れられるんだろう。理解すると、セッション gc はファイルの最終変更時刻を現在時刻および ini に設定されている maxlifetime 時刻と比較し、リサイクル メカニズムをトリガーします。
ここが奇妙な部分です写真を撮りましょう
1. このセッションを削除してから直接書き込むと、作成時間が削除直前の作成時間と同じであることがわかります。名前が同じなのはわかるけど、時間が同じってどういうことだ! Windowsが怠けてゴミ箱を取り戻したのでしょうか?私が彼を空にしたときも同じことが起こりました。
GIF画像を添付します(とても退屈です〜、この画像を開くにはIEブラウザを使用するか、美しいピクチャーショー、acdseeなどを使用してください)
LinuxでのセッションのGC
ローカルに構築したVirtualbox(ubuntuでのランプ) )
最後に書いています:
記事の書き方は少し荒くて乱雑です。
最後に、ご指導頂いた諸先輩方、特にcfc4nx様に感謝申し上げます。
次回はもっとわかりやすく書きます。 。