質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

解決済

2回答

4354閲覧

gc_maxlifetimeの基準について

Res

総合スコア184

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

1グッド

1クリップ

投稿2020/04/01 01:48

編集2020/04/01 03:03

session_gc()をcronで毎日実行し、セッションファイルを削除しています。
php.iniのsession.gc_maxlifetimeは30日(2592000秒)にしているのですが、セッションのフォルダを見てみると、30日以上経過しているにもかかわらずGCにより削除されていませんでした。(ファイルの最終更新日)

なので、GCの削除基準はどのようになっているのでしょうか。

セッションファイルの最終更新日時以外を見ているのでしょうか。

検索しても分からなかったので、分かる方がいたら、お願いいたします。
( session_gc()の削除ファイル数は常に0です )

php.ini

text

1session.gc_probability = 0 2session.gc_divisor = 500 3session.gc_maxlifetime = 2592000

cronにより定期実行しているPHP

php

1session_start(); 2// GC実行 3$gc=session_gc(); 4// セッションID削除 5session_destroy();

cronに設定しているコマンド

text

1/usr/bin/php7.2 /home/--/--/gc.php
退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2020/04/01 02:31

OSおよびPHPのインストール方法、以下の設定値を追記してください。 session.gc_divisor session.gc_maxlifetime session.gc_probability
Res

2020/04/01 02:38

申し訳ありません・・ 今追記しました!
guest

回答2

0

ベストアンサー

以下の設定は、セッション変数を削除しないという意味です。

session.gc_probability = 0

ですから、これを 0 以外にすることで、セッション情報が削除されるようになるはずです…

が、ここで注意が必要です。DebianおよびUbuntuでは、独自のcronにより、PHPとは別の仕組みでセッション情報を削除します。この理由はセキュリティ強化のためです。この場合、gc_probability を0以外にするとエラーが発生すると思います。DebianおよびUbuntuの標準パッケージでPHPを導入すると、gc_probability は 0 に設定されます。

そのために、「OSおよびPHPのインストール方法」を質問したのですが、いかがでしょうか?


追記
cronでGCを起動とのこと。その仕組は自作されたのでしょうか?
そういう特殊な実装の場合は、その詳細を記載いただかないと回答できません。

cronはどのユーザーで実行していますか? 権限がないために削除できない可能性があります。
また、Apache等から起動されるPHPが参照する php.iniとコマンドライン(cron含む)から起動されるPHPが参照するphp.iniが異なるパスの場合もあります。このあたりも確認ください。

投稿2020/04/01 02:51

編集2020/04/01 02:56
ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Res

2020/04/01 03:01

現在PHP処理を追記しました。
Res

2020/04/01 03:04

cronに設定しているコマンドも追記しました。
ockeghem

2020/04/01 03:19

gc.phpをcron起動しているユーザーの権限で、セッションのフォルダのデータを削除する権限はありますか? また、php.iniの場所は大丈夫ですか? 以下のPHPスクリプトをコマンドラインから起動して、php.iniの設定が正しく読めているかを確認してください。 <?php var_dump(ini_get('session.save_path')); var_dump(ini_get('session.gc_maxlifetime'));
ockeghem

2020/04/01 03:20

そもそも、なぜcronでセッション情報を削除しているのでしょうか?
Res

2020/04/05 22:34

ありがとうございます。やはりCronでの実行はセッションファイルにアクセス不可でしたので、Cronでfile_get_contentsを実行しGCを起動させたところ削除することができました。
guest

0

設定で調整できます。マニュアルをたどってみるのが良いかと。

session.gc_divisor
session.gc_probability

投稿2020/04/01 02:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/01 02:45

と思ったら、gc_probability の変更済みですね^^;
Res

2020/04/01 02:49

回答ありがとうございます。 私はCronで自動的にGCを実行しています。 質問内容は、"何を基準にしてmaxlifetimeと比較し、削除するのか"です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問