如果表单未验证,则文档在重定向后过期


Document Expires After Redirect If Form Did Not Validate

寻找有关此问题的建议。 我碰巧遇到了使用 php 框架 Yii,但似乎更像是 Web 表单的普遍问题/我缺乏对这个概念的理解。

问题:在浏览器上按后退按钮时,仅当表单存在验证错误时,用户才会收到"文档已过期"。 如果在提交之前没有验证错误,则不存在"文档已过期"问题(由于重定向)。

以这个简单的控制器通用示例为例:

    public function actionSomething() {
    $model=new ExampleClass;
    if(isset($_POST['ExampleClass'])) {
        $model->attributes=$_POST['ExampleClass'];
        if($model->validate()) {        
            $this->redirect(Yii::app()->createUrl('some/where'));
        } 
    }
    $this->render('_form',array(
    'model'=>$model     
    ));         
}

因此,当验证失败时,表单将包含 $_POST 数据。 然后,再次提交数据,验证通过并发生重定向。 接下来,当在浏览器上按下后退按钮时,它会以通过验证之前的状态运行到表单中,我遇到"文档已过期"问题。

我该如何防止这种情况?

我不完全确定您愿意尝试多远或尝试什么 - 我可能会建议使用会话来存储变量。这样做将允许您在页面刷新期间调用变量的值。

http://us2.php.net/manual/en/session.examples.basic.php

这里有一个更好的使用演示链接:http://www.w3schools.com/php/php_sessions.asp