一晩実行してみ たJavaベースのアップロード構造http://www.javaatwork.com/java-upload-applet/details.htmlを使用しています。
- 基本的にすべてをサーバーのハードドライブ(/ var / www / private / $ userId)に保存します
- データが整形式であることを確認します
- 次に、それを永続ストレージ(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つが期限切れにならないように?