我有一个CakePHP应用程序,其中有一个表格对于尚未登录的访问者是可见的。如果他们在没有登录的情况下提交表单,他们将被重定向到我希望他们返回的登录页面添加控制器与所有提交的表单数据。
这可能吗?如果是,怎么样?
答案 0 :(得分:4)
脱离我的头脑,这样的事情应该有效:
function beforeFilter() {
// be sure to do this before any Auth or security checks
if ($this->RequestHandler->isPost() && $this->data) {
$this->Session->write('last_post_data', $this->data);
}
}
function add() {
if (!$this->data && $this->Session->check('last_post_data')) {
$this->data = $this->Session->read('last_post_data');
}
$this->Session->delete('last_post_data');
if ($this->data) {
// save as usual
}
}
只需确保妥善处理会话中保存的POST数据,否则可能会在以后破坏。实际上,您不仅应该在会话中保存数据,还应该将其用于($this->action
和$this->controller
)的操作,并在重复使用操作中的数据之前进行检查。可能还会对数据进行非常严格的超时。
答案 1 :(得分:1)
我认为你必须使用 SESSION 或做类似的事情:
<input type="text" name="user" value="<?php echo $_POST['user'];?>">
<input type="password" name="password" value="<?php echo $_POST['password'];?>">
请注意,上面我使用了POST数组,但是如果有的话,你也可以使用Cake的数组。
答案 2 :(得分:1)
在登录前为用户分配会话,并将数据存储在会话中。该会话可能具有loginIn属性,默认为false。
不要将会话数据存储在cookie中,保持服务器端:)
答案 3 :(得分:0)
将session_start();
放在表单顶部,然后登录页面。在表单的操作页面上设置会话变量:
$_SESSION['name'] = $_POST['name'];
$_SESSION['address'] = $_POST['address'];
etc...
在表单页面上,通过说出以下内容来设置值:
<input type="text" name="name" id="name" value="<?php echo $_SESSION['name']; ?>" />
<input type="text" name="address" id="address" value="<?php echo $_SESSION['address']; ?>" />
etc...
答案 4 :(得分:0)
如果您只允许登录用户访问表单,您还可以向页面添加定期AJAX请求,其中包含使会话保持活动状态的表单。
window.setInterval(function(){
jQuery.get("/url/to_page_that_does_nothing");
}, 600000);
您也可以对其进行设置,以便仅在用户开始填写表单时才启动计时器。
免责声明:1)这使用jQuery 2)不如再次登录安全,但更快/更容易实现。