我有一個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