2015-09-05 20 views
1

通常,AJAX用於通過與後端異步通信(在我的情況下爲CodeIgniter)來動態修改網頁,以避免頁面重新加載。使用會話數據反映重新加載時對網頁的更改是否是一個好主意?

但是,我正在考慮使用會話數據爲做相同的事情,其中​​頁面重新加載不是問題

這裏是什麼,我試圖做一個代碼片段:

if($this->Member_model->checkPassword($data)){ //checks whether old password is correct 
    $this->Member_model->setPassword($new_pass); //sets the new password 
    $this->session->set_userdata('pass_meta', 'success'); //stores success in session data 
} 
else { 
    $this->session->set_userdata('pass_meta', 'fail'); //stores fail in session data 
} 
redirect('profile','refresh'); //refreshes the page 

雖然建立個人資料頁面,這是我在做什麼:

if($this->session->userdata('pass_meta')){ //checks whether the field pass_meta is set in the session 
    $data['pass_meta'] = $this->session->userdata('pass_meta'); //reads the field into $data (which will be passed to the page) 
    $this->session->unset_userdata('pass_meta'); //unsets the field in the session 
} 
else { 
    $data['pass_meta'] = ""; 
} 

所以成功/失敗消息被傳遞給觸發適當消息的View。

現在,這種方法對我來說是完美的。我的問題是:這是一個好主意嗎?這種設計方法的優點/缺點是什麼?

回答

1

大多數框架都實現了一種稱爲flash消息的東西,它是僅在一個請求中存儲在會話中的消息。這可以防止消息在不應該的時候持續存在的問題。使用這種會話沒有任何問題,主要考慮的不是讓會話數據太多(尤其是如果您使用服務器空間來存儲會話)。

編輯:通常你只是將整個消息/翻譯鍵傳遞給會話存儲,然後將它顯示在適當的類的視圖中。這樣你就可以在不同的視圖中使用通用的警告/成功消息,而不需要每個人都有額外的邏輯。

+0

可以使用Flash消息做同樣的事情嗎?我猜想,一旦我從閃存消息中讀取數據,就不會像在這種情況下那樣解除會話數據。 –

+0

@BlazeSahlzen,是的,這是他們共同的用途之一。從標籤我猜你正在使用CodeIgniter,它已經實現了Flash消息(https://ellislab.com/codeigniter/user-guide/libraries/sessions.html)。 – Looted

+0

好吧,我會試試看。謝謝! –

相關問題