【发布时间】:2014-06-11 08:51:13
【问题描述】:
如何在 SilverStripe 3.1.x 中闲置一段时间后使管理员会话过期?是否有此配置选项?
我搜了一下,发现如下代码sn-p,放在Page_Controller类中,对前端用户有效,但在管理区完全无效。
public function init() {
parent::init();
self::logoutInactiveUser();
}
public static function logoutInactiveUser() {
$inactivityLimit = 1; // in Minutes - deliberately set to 1 minute for testing purposes
$inactivityLimit = $inactivityLimit * 60; // Converted to seconds
$sessionStart = Session::get('session_start_time');
if (isset($sessionStart)){
$elapsed_time = time() - Session::get('session_start_time');
if ($elapsed_time >= $inactivityLimit) {
$member = Member::currentUser();
if($member) $member->logOut();
Session::clear_all();
$this->redirect(Director::baseURL() . 'Security/login');
}
}
Session::set('session_start_time', time());
}
超过 1 分钟不活动后,管理员用户仍处于登录状态且会话未超时。
【问题讨论】:
-
管理区域不会使用/调用您的控制器,因此永远不会调用 init() 方法。也许对于 CMS,你可以在 canView 钩子或类似的东西中实现一些东西,但不确定这是最好的解决方案......
-
我正在尝试创建一个扩展,为 CMSMain 类添加一个附加方法。以前从未这样做过,但如果可行,我会在此处发布解决方案。
标签: security session-timeout silverstripe