【问题标题】:codeigniter - check session validity prior to form submissioncodeigniter - 在提交表单之前检查会话有效性
【发布时间】:2012-10-29 19:21:12
【问题描述】:

在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');
       }
    }

【问题讨论】:

    标签: codeigniter session session-timeout


    【解决方案1】:

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

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

    【讨论】:

    • 由于您的解释而接受并赞成。我对表格也有同样的想法,但有时想知道什么时候事情看起来太容易了。
    【解决方案2】:

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

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

    【讨论】:

    • 我选择了一个不同的答案,但我赞成这个,因为它很有帮助。
    猜你喜欢
    • 2016-07-23
    • 2015-02-24
    • 2012-07-08
    • 1970-01-01
    • 2022-11-24
    • 2019-07-26
    • 2016-08-06
    • 1970-01-01
    • 2020-06-14
    相关资源
    最近更新 更多