私はいくつかのサブアプリケーションを格納するアプリケーションに取り組んでいます。私は30分も使わないと自動ログアウトを実装したいと思います。私は、ログインしてAuthControllerを持っており、bootstrap.phpのを使用して、カスタム/ログインおよび/ログアウトルートだけでなく、このようになります。フロントコントローラプラグインにマッピングされたアクションログアウト:私はPHPとZendに新たなんだZend Framework非アクティブ後の自動ログアウト
class Plugin_SessionTrack extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$employeeSession = new Zend_Session_Namespace('employeeSession');
$employeeSession->setExpirationSeconds(10);
}
}
を10秒後にセッションに何が起こっているのですか?私はそれをテストのために低く設定しました。私がしたいのは、フロントコントローラープラグインによる最後のリクエストの時刻が30分以上前だった場合、セッションを破棄してユーザーをログアウトして/ loginにリダイレクトする場合です。
最後のリクエストの時刻を追跡していないことは明らかですが、ユーザーがこのpreDispatchメソッドを使用してリクエストを受け取るたびにsetExpirationSecondsがリフレッシュされることを望みました。
おそらくクッキーが必要ですか?私は実際にログアウトアクションを開始する必要はありません。それは、ユーザーが次回にリクエストをしたときに処理できます。セッションが最後の30分に何もしなかった場合、セッションが破棄されてログアウトされます。私が45分離れても私の画面は同じように見えますが、リンクをクリックするか、フォームを送信して提出すると、私は/ loginに私を送ります。私はJSカウントダウン警告の後にいくつかのタイプについて心配することができます。
編集:誰もがそれを見たい場合はここに私のブートストラップだ:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
/**
* Custom routes:
*
* /login
* /logout
*/
protected function _initRoutes()
{
$router = Zend_Controller_Front::getInstance()->getRouter();
$loginRoute = new Zend_Controller_Router_Route('login', array('controller' => 'auth', 'action' => 'login'));
$logoutRoute = new Zend_Controller_Router_Route('logout', array('controller' => 'auth', 'action' => 'logout'));
$routesArray = array('login' => $loginRoute, 'logout' => $logoutRoute);
$router->addRoutes($routesArray);
}
protected function _initPlugins()
{
$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin(new Plugin_SessionTrack());
}
}
まず、「非アクティブ」を定義します。私たちはPHPで見ることができるのはサーバー要求だけです。私は本当にこれを示唆していませんが、あなたはアクティビティを監視するためにjavascriptを使いたいときや、ログアウトメソッドを呼び出すときにタイムアウトすることがあります。ネームスペースの有効期限は、必要なものを実行していないようです。 – RockyFord
非アクティブとは、ユーザーがPOSTしたことがないことを意味し、コントローラーでアクションが発生していないことを意味します。基本的には「キーボードから離れて」です。このサブアプリケーションはかなりデータ駆動型であるため、コントローラが動作していない場合(アクション)、アプリケーションを使用していないことが明らかです。 –