codeigniter - 在表单提交之前检查会话有效性

时间:2012-10-29 19:21:12

标签: codeigniter session session-timeout

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

示例:我即将填写表格并离开我的电脑一段时间。当我返回时,我成功提交了表单,当我检查数据库时,userID为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');
       }
    }

2 个答案:

答案 0 :(得分:1)

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

提交表单后,它会发送数据。您必须使用服务器端语言进行操作 - 验证表单数据 在您的情况下,正如您已经注意到的那样,检查会话是否存在是正确的方向。根据检查结果,您可以重定向到同时保存表单数据的登录,并在用户登录后重新填充用户的表单字段。

答案 1 :(得分:1)

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

if ($this->form_validation->run() == FALSE || !sess_valid())