私は、ユーザーの作業時間をデータベースに記録するシステムを実装する必要があるZendのアプリケーションを持っています。 id_worktime、id_user、login_time、logout_timeがあります。ログインとログアウトは簡単ですが、ユーザーがgc_maxlifetimeよりも何もしないと問題があります。セッションテーブルに古い行が削除され、logout_timeがworktimeテーブルに更新されて - 私は、他のWebブラウザからリフレッシュを打つとき、それはうまく動作寿命が終わったときにZend Frameworkのどの部分がセッションオブジェクトをクリーニングしていますか?
class Vao_Session extends Zend_Session_SaveHandler_DbTable
{
public function gc($maxlifetime)
{
$garbage = $this->fetchAll($this->select()->from('session')->where('`modified` + `lifetime` < ?', time()));
foreach ($garbage as $session)
{
$variables = array();
$a = preg_split("/(\w+)\|/", $session['data'], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
for($i = 0; $i < count($a); $i = $i + 2){
$variables[$a[$i]] = unserialize($a[$i + 1]);
}
if (isset($variables['worktime']))
{
$worktime = $variables['worktime'];
$idWorktime = $worktime['id_worktime'];
if ($idWorktime)
{
$date = new Zend_Date($session['modified']);
$data['logout_time'] = $date->toString(Zend_Date::ISO_8601);
$worktimeTable = new Application_Model_DbTable_Worktime();
$worktimeTable->update($data, 'id_worktime = '.$idWorktime);
}
}
}
parent::gc($maxlifetime);
}
}
:私はここで、iは、GC()メソッドをオーバーライドZend_Session_SaveHandler_DbTableを拡張するクラスを書きました。しかし、ユーザーがログインしているWebブラウザでリフレッシュすると(現在セッションは期限切れです)、何も作業時間に入れられず、セッションの行が更新されます - 'modified'列は現在の時刻に設定され、 'data'
SessionPreferencesFlag|a:1:{s:16:"sessionSavedInDb";b:1;}
(以前はZend_Authオブジェクトがありましたが、もっと多く、とりわけid_worktimeが必要です)。
これで、Zend Frameworkのどの部分がセッション行をクリアするのでしょうか?私はそれがZend_Sessionの何かだと思っていますが、実際それを見つけることはできません。いくつかの助けてください?
ありがとうございます!あなたは正しい、私はどのように私はこれを逃すことができるか分からない:) – sas