在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');
}
}
答案 0 :(得分:1)
表格可以在任何时间点提交。表单根本不需要会话。表单是HTML文档的一部分,只需要有效的HTML。换句话说,你的表格一切都很好。
提交表单后,它会发送数据。您必须使用服务器端语言进行操作 - 验证表单数据 在您的情况下,正如您已经注意到的那样,检查会话是否存在是正确的方向。根据检查结果,您可以重定向到同时保存表单数据的登录,并在用户登录后重新填充用户的表单字段。
答案 1 :(得分:1)
我的猜测是你必须手动处理会话检查。您可以在表单验证运行的级别上执行此操作。例如:
if ($this->form_validation->run() == FALSE || !sess_valid())