我有一个CakePHP应用程序,其中有一个窗体对于甚至没有登录的访问者是可见的。如果他们没有登录提交窗体,它们会被重定向到一个登录页面,从那里我希望他们回到所有提交的表单数据的添加控制器。授权后再次发布数据
这可能吗?如果是,如何?
我有一个CakePHP应用程序,其中有一个窗体对于甚至没有登录的访问者是可见的。如果他们没有登录提交窗体,它们会被重定向到一个登录页面,从那里我希望他们回到所有提交的表单数据的添加控制器。授权后再次发布数据
这可能吗?如果是,如何?
关闭我的头顶,这样的事情应该工作:
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
),并在重新使用操作中的数据之前检查该数据。可能还会对数据进行非常严格的暂停。
这将是我会做的同样的事情。 – jpdelatorre 2010-02-02 10:09:14
我想你将不得不使用SESSION或做类似这样:
<input type="text" name="user" value="<?php echo $_POST['user'];?>">
<input type="password" name="password" value="<?php echo $_POST['password'];?>">
注意,上面我已经使用POST数组,但你也可以用蛋糕的数组,这是否有一。
登录之前为用户分配会话,并将数据存储在会话中。该会话可能具有一个属性loggedIn,该属性默认为false。
不要存储在cookie中的会话数据,虽然,保持服务器端:)
把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...
这是处理会话的一般PHP方式,有没有办法用cakePHP来完成。它有很多帮手,但我不知道该怎么使用以及如何使用。 – Mayank 2010-02-01 14:50:26
我可能会从这里开始。 http://book.cakephp.org/view/322/The-Cake-Session-Component – 2010-02-01 15:39:34
如果您只允许登录的用户访问表单,还可以使用保持会话活动的表单向页面添加定期AJAX请求。
window.setInterval(function(){
jQuery.get("/url/to_page_that_does_nothing");
}, 600000);
您还可以设置它,以便计时器仅在用户开始填写表单时才被激活。
免责声明:1)这使用jQuery 2)不如再次登录安全,但更快/更容易实现。
Lemme澄清它,我有一些用户填写表单。但在此期间,由于会话超时,它们会被注销。当他们提交表单时,他们被重定向到登录页面,他们从表单提交的所有数据都将丢失。有没有办法阻止它使用CakePHP功能? (不是基本的PHP) – Mayank 2010-02-01 15:11:38
可能不是。我对CakePHP不熟悉,但是如果在会话超时之前无法填写表单,则需要更长的会话超时时间。 – 2010-02-01 15:39:00