Tôi đang làm việc trên một ứng dụng chứa nhiều ứng dụng phụ và tôi muốn triển khai đăng xuất tự động sau 30 phút không hoạt động. Tôi có một AuthController với đăng nhập và đăng xuất hành động ánh xạ tới tùy chỉnh/đăng nhập và các tuyến đường/logout sử dụng Bootstrap.php cũng như một bộ điều khiển cắm phía trước trông như thế này:Tự động đăng xuất khung công tác Zend sau khi không hoạt động
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);
}
}
Tôi mới đến PHP và Zend , chính xác những gì đang xảy ra với phiên sau 10 giây? Tôi có nó thấp để thử nghiệm. Những gì tôi muốn có xảy ra là nếu thời gian của yêu cầu cuối cùng thông qua các plugin điều khiển phía trước đã được lớn hơn 30 phút trước, phá hủy các phiên và đăng nhập người dùng ra và chuyển hướng chúng đến/đăng nhập.
Tôi có thể thấy rõ ràng rằng tôi không theo dõi thời gian của yêu cầu cuối cùng nhưng hy vọng của tôi là setExpirationSeconds sẽ được làm mới mỗi lần người dùng có yêu cầu đến thông qua phương thức preDispatch này.
Có thể cần sử dụng cookie? Tôi không cần thực sự bắt đầu hành động đăng xuất, nó chỉ có thể được xử lý vào lần tiếp theo người dùng đưa ra yêu cầu, nếu họ không làm gì trong nửa giờ cuối, phiên bị hủy và họ đã đăng xuất, có nghĩa là nếu tôi đi bộ trong 45 phút, màn hình của tôi vẫn trông giống nhau nhưng nếu tôi nhấp vào liên kết hoặc thử và gửi biểu mẫu tôi đã gửi, tôi sẽ gửi cho tôi/đăng nhập. Tôi có thể lo lắng về một số loại cảnh báo đếm ngược JS sau này.
Edit: Đây là bootstrap của tôi nếu có ai muốn nhìn thấy nó:
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());
}
}
Đầu tiên xác định 'không hoạt động'. Tất cả những gì chúng ta có thể thấy trong php là yêu cầu máy chủ. Tôi thực sự ghét đề nghị này, nhưng bạn có thể muốn sử dụng javascript để theo dõi hoạt động và khi nó 'lần ra' gọi phương thức đăng xuất. Hết hạn không gian tên dường như không làm những gì bạn cần. – RockyFord
Không hoạt động có nghĩa là người dùng đã không POST một biểu mẫu, họ đã không được nhấn hành động trong bộ điều khiển. Về cơ bản chúng "Away from Keyboard". Các ứng dụng phụ nhà này là khá dữ liệu điều khiển vì vậy nó nên được rõ ràng rằng họ không sử dụng các ứng dụng nếu mọi thứ không đánh các bộ điều khiển (hành động). –