セッション時間の延長方法とphp.iniの設定について

このQ&Aのポイント
  • プログラム初心者の方向けに、セッション切れの時間を延長する方法をご紹介します。具体的には、自前のphp.iniファイルにsession.gc_maxlifetime = 3600と一行だけ記述するだけで設定できます。
  • また、php.iniファイルのパーミッションについても解説します。php.iniファイルには重要な情報が含まれているため、他のユーザーには見えないようなパーミッションを設定することをおすすめします。
  • 以上の方法を試すことで、セッション切れの時間を延長することができます。初心者の方でも簡単に設定できるので、ぜひ試してみてください。
回答を見る
  • ベストアンサー

セッション時間について

プログラム初心者です コアサーバーとゆうレンタルサーバーを使っています。 phpの設置しているディレクトリに自前のphp.iniを置けば反映されるらしいです セッション切れの時間をのばす方法を教えてください(自前でphp.iniを作る方法を教えてください) サーバーのphpinfo確認したら session.cookie_lifetime 0 0 session.gc_maxlifetime 1440 1440 になっていました 自前のphp.iniにsession.gc_maxlifetime = 3600と一行だけ記述するだけでできますか? それとも、php.iniにxamppにあるような設定をワラワラ書かないといけませんか? php.iniのパーミッションは何にしたほうがいいでしょうか?見えるとまずいですよね? よろしくお願いします  

  • flash0
  • お礼率97% (297/306)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

GCは、session.gc_probability / session.gc_divisor の確率で起動します。1/1000であれば、999/1000はスルーです。 というか、もし共用サーバなら session.save_path の値がどうなっているか(他のユーザと共用になっていないか)をチェックしておくべきです。これが共用になっていると自分のスクリプトだけ長く設定しても意味がありません(他のスクリプトの実行時に消されてしまう)。自分のサイトスペース内に設定してください。

flash0
質問者

お礼

回答ありがとうございます GCも理解できました。.htaccessでsession.gc_divisorを設定したらそのように動きました(一日様子見てましたがこちらで設定したLocal Valueは残っていました) このままつかえそうなんですがやはりsession.save_pathも変えたほうがいいでしょうか? session.save_pathを調べてみるとno valueになっていました(これは共有とゆうことでしょうか?)

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

session.gc_maxlifetime は PNP_INI_ALL ですから、まずは .htaccess で設定して試すことをお勧めします(.htaccessなので、記述は php_value session.gc_maxlifetime 3600 )。 http://www.php.net/manual/ja/session.configuration.php#ini.session.gc-maxlifetime http://www.php.net/manual/ja/configuration.changes.modes.php

flash0
質問者

お礼

回答ありがとうございます 設定したとおりにうごきました。関連したsession.gc_divisorをもう少し教えてください session.gc_divisorが1000になっている場合は、1000人中999人はセッションタイムが過ぎてもログインしたままになるってことでしょうか? session.gc_divisorの数値が多いほうがサーバーに負担がかからないってことですか? htaccess使ったことないのですが負荷が高いですか?(他にhtaccessで記述していません) よろしくお願いします

関連するQ&A

  • 困ってます。phpセッションについて

    phpセッションについて教えてください。 既にwebサーバで動いているシステムがあります。 改修する必要があるため、パソコンの仮想サーバ(XAMPP)で動かした所、セッションに関わる部分がうまくいきません。 ●保存してる箇所 session_start(); session_regenerate_id( TRUE ); $_SESSION['xxx'] = $xxx; ●呼び出している箇所 session_start(); session_regenerate_id( TRUE ); if ( !isset( $_SESSION['xxx']) ) { //←ココでひっかかります //終了するための処理 exit; } $xxx = $_SESSION['xxx']; ************** 設定に関する部分です。 ●「.htaccess」の設定は以下のようにしています。 php_flag session.use_cookies On php_value session.cookie_lifetime 0 php_flag session.use_trans_sid Off php_value session.gc_maxlifetime 3600 php_value session.save_path 'C:temp' 'C:temp'に保存されたデータはありますので、書き出しはうまくいってるようです。 呼び出しがうまくいってません。 ソースの session_start(); session_regenerate_id( TRUE ); の直後に var_dump($_SESSION['xxx']); で値を参照するとNULLです。 ●「php.ini」のセッションの箇所は以下のようになっています。 session.save_handler = files よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッション内容が化ける?

    PHP初心者です。 次の環境で一種のグループウェアを開発しました。 OS: RedHat Linux9.0 Web Server: Apache2.0.10 DB: PostgresSQL 7.4.2 PHP4.2.2 「ある社員が、ログインしたまま会議に出席し数時間後に戻ってみると、 画面内容が別の社員のものになっている」 という不可解な報告がありました。 調べてみるとログイン時のポータル画面は変化していないのですが、そこから 画面を切り替えて明細表示すると、社員名称が別の社員になっているのです。 しかも明細内容は何も表示されていません。 セッションで取得した内容が化けているのではないかと思っているのですが、 知識不足で行き詰まっています。 php.ini の設定は次のようになっています。(defaultだと思われます) session.save_handler = files session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 100 session.gc_maxlifetime = 1440 session.bug_compat_42 = 1 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 原因と対処法が分かる方、どうか教えてください。

    • 締切済み
    • PHP
  • セッションファイルの有効期限ですが、

    セッションファイルの有効期限ですが、 phpのデフォルトでは session.gc_maxlifetimeが1440、 session.gc_probabilityが1のようなんですが、 これだとローカル環境で確認したところ、 2日くらい前のセッションファイルでもサーバ側に残っています。 いくらsession_regenerate_id(true)とかやっても、いきなり画面を閉じたりすると このように残ってしまうのですが、デフォルトの設定のままだと危険ではないでしょうか? また、ためしに設定を session.gc_maxlifetimeを5、 session.gc_probabilityを100に変えてみたところ、 古いセッションファイルはすぐに削除されましたが、 最新のものだけはなぜか残り続けました。 セッションファイルの削除はどのように実装されていますか?(特に画面をいきなり閉じられた場合の対策) また、session.gc_maxlifetime、session.gc_probabilityのデフォルト値は変更していますでしょうか? さらに、サーバ側のセッションファイルさえ破棄してしまえば、クライアントのセッションクッキーは残っていても別に問題ないと思うのですが、どうでしょう? ちなみに私のPHPバージョンはwindows版の5.2.4です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションを保持する時間を確定する関数ってあるのでしょうか?

    タイトル通りなのですが、PHPでセッションを保持する時間を確定する関数ってあるのでしょうか? 検索すると、php.iniのsession.gc_maxlifetimeを指定すれば可能のようですが、PHPファイルにセッションの保持時間を違う物に指定したい場面がありますので、使用できません。 ここでは1時間、ここでは2時間、というようにPHP文中で指定する関数というのはありますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セッションの有効期限

    Linux7.2 + PHP4.2(DSO版)+ Apacheを使用しセッション管理を使用した認証機能を制作しています。 session.cache_expire = 180としているのに ログイン後20分くらいでセッションが切れる現象が生じています。 プログラム上では特別なことはしていません。 session_start(); session_cache_limiter('nocache'); を先頭に書いているだけです。 以下、php.iniのセッション関連の設定です。 どなた方この現象についてご存知でしたら教えて下さい。 宜しくお願いします。 session_auto session.save_handler = files session.save_path = /tmp session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.gc_probability = 1 session.gc_maxlifetime = 1440 session.referer_check = session.entropy_length = 0 session.entropy_file = ;session.entropy_length = 16 ;session.entropy_file = /dev/urandom session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0

    • 締切済み
    • PHP
  • session(PHP)が表示されない。

    sessionを理解するために簡単な例文を入力して sessionを呼び出そうとしました。 しかしできません。文法上は本のCDを丸写しなので 問題ないと思います。 設定(php.ini)で何か確認する場所があればお願いします。 Windows XP Apache 1.3.27 PHP 4.3.1 session.auto_start Off Off session.bug_compat_42 On On session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_dividend 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler 0 0 session.save_path /tmp /tmp session.serialize_handler php php session.use_cookies On On session.use_only_cookies Off Off session.use_trans_sid On On

    • ベストアンサー
    • PHP
  • さくらサーバーでsessionが使えません。

    題名の通りなのですが、さくらのレンタルサーバープレミアムを使っているのですが、 セッションがまったく動きません。 phpを勉強をし始めたばかりでプログラムはあまり詳しくなく初心者サイトを見ながらウェブサイトを 作っていたのですが・・。 以前は動いたのですが、一年ぶりくらいにphpでサイトを作っている最中に気がつきました。 サーバーの仕様が変更になったのでしょうか・・。 xamppをインストールをしてローカル環境で試した所ちゃんとsessionは動いています。 アップロードすると動きません。(変数の受け取りができません) formで値を送ったりは問題ないのですがsessionが動かないため非常に困っています。 プログラムに問題はなく、ググっても解決できません。 <?php phpinfo(); ?> でセッションは下記のような状況になっていますが、私ではまったくわからず、session.save_pathを明示的に 示さなければならない、などちらほら見かけますがよくわかりません。 どしたら動くのでしょうか・・。 Session Support enabled Registered save handlers files user Registered serializer handlers php php_binary Directive Local Value Master Value session.auto_start Off Off session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_httponly Off Off session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file /dev/urandom /dev/urandom session.entropy_length 32 32 session.gc_divisor 1000 1000 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.hash_bits_per_character 5 5 session.hash_function 0 0 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path no value no value session.serialize_handler php php session.upload_progress.cleanup On On session.upload_progress.enabled On On session.upload_progress.freq 1% 1% session.upload_progress.min_freq 1 1 session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS session.upload_progress.prefix upload_progress_ upload_progress_ session.use_cookies On On session.use_only_cookies On On session.use_trans_sid 0 0

    • 締切済み
    • PHP
  • PHPでセッションが切れない

    いつもお世話になります。 現在、練習用として管理画面を作成しています。 session.gc_maxlifetime=1440(24分)で設定しているのですが、一時間以上放置してもセッションが切れません。。 session.gc_maxlifetime以外に何か設定が必要なのでしょうか? PHPのバージョンは5.3.3になります。

    • 締切済み
    • PHP
  • 初歩的な質問 セッション管理について

    セッション処理をしたいと考えていますが、 分からない点が多く困っています。 したいと思っていることは、「ログイン」的な処理です。 訪問者がブラウザを閉じても、サイト設計者が設定した「期間」、 ログイン状態をキープさせておけるような仕様です。 ※よくあるタイプです。 (特段、難しいことや変わったことをしようとしてはいません。) ただ、ちょっと変わっている点は、ログインはパスワード無しで行います。 フォーム(POST)でボタンをクリックしたら、誰でもログインできるようなものです。 で、上記処理をする方法として、大きく分けて、 (1)クッキー($_COOKIE)を使う方法と、 (2)セッション($_SESSION)を使う方法とがあるように思っています。 (1)の方法だと、 データそのものをクライアント側に保存させるのでセキュリティ上、やや難があり、 (2)の方法だと、「キー(セッションID)」だけをやりとりするので比較的安全、 ということをよく耳にします。 ただ、パスワードを扱うわけではないので、この場合には、 (1)の方法でもアリな気がしています。 しかし、今後、パスワード形式に移行しないとも限らないので、 (2)を使った方法で話を進めたいと思います。 パスワードのやりとりがないのなら、(1)の方が断然楽でいいよ~ ということであれば、話は変わってきます。 その場合には教えて下さい。 (※質問文の中で、私は随所に変なことを言っている可能性がありますので、 適宜、ご指摘頂けると嬉しく思います。) 話を戻しまして、 ここからは、前述の(2)の方法で話を続けさせて頂きます。 セッション処理の流れについてですが、 セッションIDをクライアントに送りつけ、保存させる方法は、 session_start()をスクリプト先頭に書き、 $_SESSION['login'] = 'おまえはもう、ログインしてる…。'; と、どこかに書くことで、 この$_SESSION['login']値を保持している間、訪問者は、 サイト内のページを、ログインされた状態として閲覧できる と、私は考えています。 何か変なことを言っていましたら、ご指摘下さい。(★ポイント1) //----------------------------------- 次に、セッション保持期間の設定の方法についてですが、 ネット上で調べた所、 ini_set("session.gc_maxlifetime", "1440"); のように設定できると書いてありました。 このini_set()による設定が、どう作用するのか、 この点もよく分からずにいます。(★ポイント2) session.gc_maxlifetimeの設定自体は、スクリプト終了とともに、 Master Valueに戻されるようですが(PHPマニュアルより)、 私が気になっているのは、 そのスクリプトで生成したセッションの保持期間は、どうなっているのか? ということです。 ちょっと乱暴な書き方をしますが、 例えば、 php.ini上(つまり、Master Valueの設定値)では、 session.gc_maxlifetime:1440 というような設定 の場合に、 スクリプトAの中で、 ini_set("session.gc_maxlifetime", "~仮に24時間としておきます~"); のように書き、 そのあとに、 $_SESSION['login'] = 'おまえはもう、ログインしてる…。'; と書いた場合、 クライアントには、$_SESSION['login']のデータは24時間保持される、 ということでしょうか。 つまり、 スクリプト内に書いた、 ini_set("session.gc_maxlifetime", "~仮に24時間としておきます~"); という記述は、 そのスクリプトでセッションIDをクライアントに与える場合の「そのセッションIDの保持期間」のみ を設定できる、という理解でよろしいでしょうか。 当たり前のことをお聞きしているかもしれませんが、 どなたか、どうか、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • セッションのクッキー有効期間を個別に設定

    セッションのクッキーの有効期間は、 [php.ini] session.cookie_lifetime=0 と設定すると、全てのユーザに対して、ブラウザが終了するまでとなりますが、これを個別のセッションごとに(PHPのプログラム側で)管理することは可能でしょうか。 Aさんの場合は、ブラウザを終了しても3日間セッションを有効とし、Bさんの場合は、php.iniの設定どおりブラウザが終了するとセッションも終了する。というようなことをやりたいと思っています。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう