2012-10-29 37 views
1

在codeigniter中,即使会话已过期,似乎也可以提交表单。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'); 
     } 
    } 

回答

1

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

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

+0

由于您的解释,接受并向上投票。我对形式有很多想法,但有时候想知道什么时候事情看起来太简单了。 – chowwy

1

我的猜测是您必须手动保管的会话检查。您可以像在窗体验证运行级别那样执行此操作。例如:

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

我选择了一个不同的答案,但我赞成这个,因为它有帮助。 – chowwy