1

在 codeigniter 中,似乎即使在会话过期后也可以提交表单。

示例:我正要填写表格并离开我的电脑一会儿。返回时,我提交表单成功,当我查看数据库时,用户ID为0。所以我刷新页面,发现自己重定向到登录页面--会话已过期,我仍然可以提交表单。似乎不应该发生这种情况。

我已经设置了一个应该处理它的函数,但是我想了解为什么可以在会话过期后提交表单,或者这是否表明出现了问题。

function sess_valid() {
       $sess_timeout = now() - 3600; //3600 is the session expiry time
       $last_act = $this->session->userdata('last_activity');

       if($last_act <= $sess_timeout)
       {
        redirect('login');
       }
    }
4

2 回答 2

1

可以在任何时间点提交表单。表单根本不需要会话。表单是 HTML 文档的一部分,它只需要有效的 HTML。换句话说,你的表格一切都很好。

提交表单后,它会发送数据。这是您必须使用服务器端语言的地方 - 验证表单数据。
就您而言,正如您已经注意到的那样,检查会话是否处于活动状态是正确的方向。根据检查结果,您可以重定向到登录,同时将表单数据保存在某处,并在他/她登录后重新填充用户的表单字段。

于 2012-10-29T19:46:41.967 回答
1

我的猜测是您必须手动处理会话检查。您可以像以前一样在表单验证运行级别执行此操作。例如:

if ($this->form_validation->run() == FALSE || !sess_valid())
于 2012-10-29T19:46:42.027 回答