2

一晩実行してみ たJavaベースのアップロード構造http://www.javaatwork.com/java-upload-applet/details.htmlを使用しています。

  1. 基本的にすべてをサーバーのハードドライブ(/ var / www / private / $ userId)に保存します
  2. データが整形式であることを確認します
  3. 次に、それを永続ストレージ(Amazon S3)に渡します。

手順1が完了したら、次のコードを実行します。

if($_SESSION['userId'])
    {//Makes sure that data is well-formed} 
else
    {echo 'you are not logged in';}

これを4時間実行してみyou are not logged inたところ、画面に印刷されていることがわかりました。

これがcgiphp.iniファイルの適切なディレクティブです(私はapache2でubuntu 12.04を使用しています)。

session.gc_probability = 0
session.gc_divisor = 1000
session.gc_maxlifetime = 14400 //this is 30 hours, which is far greater than the 4 hours it was running
session.cache_expire = 1800
session.cookie_lifetime = 0

これらのディレクティブのほとんどは、とを除いてデフォルトsession.gc_probabilityですsession.gc_maxlifetime

私はこの問題を解決しようとしていて、Jeffによる非常に役立つブログに出くわしました。このブログから、ブラウザ内からWebサイトが非アクティブな期間が発生すると、ブラウザによってブラウザに保存されているPHPSESSIDCookieが削除される可能性があると推測されました。彼は提案します

「ブラウザでバックグラウンドのJavaScriptプロセスを作成し、定期的なハートビートをサーバーに送信します。たとえば、5分または10分ごとに有効期限が設定された新しいCookieを再生成します。」 http://www.codinghorror.com/blog/2008/04/your-session-has-timed-out.html

だから私はそれをすることにしました。

function myTimeoutFunction()
{
    $.ajax({
        url: "heartbeat.php",                    
        success: function() {
        }
    });
    setTimeout(myTimeoutFunction, 15*60*1000);
}
myTimeoutFunction();

heartbeat.php <?php session_start(); ?>

約4時間かかるアップロードについてこれをテストしようとしています。しかし、私は次を読んだだけです

一般に、session.gc_maxlifetimeは、セッションデータが最後に変更されてからの最大存続期間を指定すると言うことができます(session_startが最後に呼び出されたときではありません)

https://stackoverflow.com/a/1516338/784637

3つのセッション変数がある場合$_SESSION['userId'] $_SESSION['firstName'] $_SESSION['lastName']、、のすべての値をリセットする必要がありますか?heartbeat.php

session_start(); 
$_SESSION['userId'] = $_SESSION['userId'];
$_SESSION['firstName'] = $_SESSION['firstName'];
$_SESSION['lastName'] = $_SESSION['lastName'];

または、1つの値をリセットできますか

session_start(); 
$_SESSION['lastHeartbeat'] = time();

他の3つが期限切れにならないように?

4

1 に答える 1

4

PHPセッションは全体として保持されます。$ _SESSIONを変更すると、変更時間が更新され、拡張機能によって、セッション全体が保持されます。

実際の問題に関して:PHPは最大時間に達するまでGCセッションを行うべきではありませんが、それはPHPが常にそれをクリアしているという意味ではありません。デフォルトでは、セッションは/ tmp(または別の)ディレクトリに保持され、一部のLinuxディストリビューションにはcronジョブがあり、フォルダをときどきクリーンアップする場合があります。PHPとは無関係にセッションをクリアする可能性のあるcronやその他のものを確認してください。

于 2012-06-18T05:51:58.467 に答える