2010-02-01 51 views
1

我有一個CakePHP應用程序,其中有一個窗體對於甚至沒有登錄的訪問者是可見的。如果他們沒有登錄提交窗體,它們會被重定向到一個登錄頁面,從那裏我希望他們回到所有提交的表單數據的添加控制器。授權後再次發佈數據

這可能嗎?如果是,如何?

+0

Lemme澄清它,我有一些用戶填寫表單。但在此期間,由於會話超時,它們會被註銷。當他們提交表單時,他們被重定向到登錄頁面,他們從表單提交的所有數據都將丟失。有沒有辦法阻止它使用CakePHP功能? (不是基本的PHP) – Mayank 2010-02-01 15:11:38

+0

可能不是。我對CakePHP不熟悉,但是如果在會話超時之前無法填寫表單,則需要更長的會話超時時間。 – 2010-02-01 15:39:00

回答

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),並在重新使用操作中的數據之前檢查該數據。可能還會對數據進行非常嚴格的暫停。

+0

這將是我會做的同樣的事情。 – jpdelatorre 2010-02-02 10:09:14

1

我想你將不得不使用SESSION或做類似這樣:

<input type="text" name="user" value="<?php echo $_POST['user'];?>"> 
<input type="password" name="password" value="<?php echo $_POST['password'];?>"> 

注意,上面我已經使用POST數組,但你也可以用蛋糕的數組,這是否有一。

1

登錄之前爲用戶分配會話,並將數據存儲在會話中。該會話可能具有一個屬性loggedIn,該屬性默認爲false。

不要存儲在cookie中的會話數據,雖然,保持服務器端:)

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... 
+0

這是處理會話的一般PHP方式,有沒有辦法用cakePHP來完成。它有很多幫手,但我不知道該怎麼使用以及如何使用。 – Mayank 2010-02-01 14:50:26

+0

我可能會從這裏開始。 http://book.cakephp.org/view/322/The-Cake-Session-Component – 2010-02-01 15:39:34

0

如果您只允許登錄的用戶訪問表單,還可以使用保持會話活動的表單向頁面添加定期AJAX請求。

window.setInterval(function(){ 
    jQuery.get("/url/to_page_that_does_nothing"); 
}, 600000); 

您還可以設置它,以便計時器僅在用戶開始填寫表單時才被激活。

免責聲明:1)這使用jQuery 2)不如再次登錄安全,但更快/更容易實現。