2017-08-03 2 views
0

私は自分のコードでセッション変数を使用しています。私はクッキーを使って活動を始めません。私はsession_start()を実行し、変数の操作を行います。 しかし、しばらくして(約30分)セッションが終了します。 print_r($ _ SESSION)を実行するとセッションは無効になります。phpセッション変数は、このための命令なしで破棄されました

session.gc_maxlifetimeを7200(2時間)に設定しようとしましたが、セッションは30分以内にもう一度破棄されます。

どうすれば解決できますか?それは正常ですか?ブラウザを閉じたり、文/命令をsession_destroyに与えると、セッションは破壊されるだけではありませんか?

+1

デフォルトの有効期間は24分です。あなたが間違った 'php.ini'ファイルを変更したと思います。通常は、ApacheでPHPを使用する場合は2つ、CLIの場合は2つあります。 '<?php phpinfo();?>'でクイックページを行い、実際の 'php.ini'ファイルの場所を確認し、正しいものを変更していることを確認してください – RiggsFolly

+0

さらに' phpinfo() '出力'session.gc_maxlifetime'の設定値が' session'セクションの下にあるのが実際に分かります。 – Phylogenesis

+0

()のphpinfo後: [PHPバージョン7.1.7]、 [サーバーAPI =>たLiteSpeed V6.11]、 [ロード設定ファイル=> /opt/alt/php71/etc/php.ini]、 [セッションの追加.iniファイルの解析=> /opt/alt/php71/link/conf/alt_php.ini] [session.cookie_lifetime => 0]、 [session.gc_maxlifetime => 7200] –

答えて

0

セッション変数は、ブラウザが閉じられるまで情報を保持するためのものです。私は、あなたがコードを投稿していないので、あなたがあなたのプロジェクトで達成したいことをかなり確信していません。 PHPスクリプトの末尾にsession_write_close();を入れないほうがシンプルなのですが、最初にsession_start()というhtmlタグがあなたのコードを混乱させる可能性があります。

+0

私はちょうどセッションがこれについての指示なしで破壊したり、ブラウザを閉じることを望んでいない。そして、私が確認するのは、このセッションが間に合わずにセッションが吹き飛ばされるということです。私はクッキーを使用しないことを考慮に入れます。私は疑念を示すためにコードは必要ありません。私はすべてのページでsession_start()を使用し、ユーザーがログインしているかどうかを制御するためにsymplyセッションを使用します。 –

0

デフォルトのタイムアウトは24分です。

php.ini以外でも、コードで変更できます。 How to change the session timeout in PHP?


それについての記事:この回答から

// server should keep session data for AT LEAST 1 hour 
ini_set('session.gc_maxlifetime', 3600); 

// each client should remember their session id for EXACTLY 1 hour 
session_set_cookie_params(3600); 

session_start(); // ready to go! 

:あなたはこれを試みることができる

https://bytes.com/topic/php/insights/889606-setting-timeout-php-sessions

私は2時間に適応したコードを与えます。その上

session_start(); 
$timeout = 7200; // Number of seconds until it times out. 

// Check if the timeout field exists. 
if(isset($_SESSION['timeout'])) { 
    // See if the number of seconds since the last 
    // visit is larger than the timeout period. 
    $duration = time() - (int)$_SESSION['timeout']; 
    if($duration > $timeout) { 
     // Destroy the session and restart it. 
     session_destroy(); 
     session_start(); 
    } 
} 

// Update the timout field with the current time. 
$_SESSION['timeout'] = time(); 

php.netページ:

http://php.net/manual/en/function.session-set-cookie-params.php

他のスタック答えは(いくつかの高い評価をする)、これを確認します。同様に

PHP sessions default timeout
How do I expire a PHP session after 30 minutes?

+0

"ini_set( 'session.gc_maxlifetime'、3600);"私はsession_start()を持っているすべてのページで?そしてsession_start()の前に? このように:<?php ini_set( 'session.gc_maxlifetime'、3600); session_start(); ?> –

+0

私の最後のリンクを読んで、それはそこに良い情報です。具体的には、私は単にそれをあなたのPHPヘッダファイルに含めるだけです。 – Madivad

関連する問題