2011-10-05 89 views
0

我做了CI認證控制器允許用戶登錄到該網站,登錄後,我重定向他以前訪問過的網址,我繼續使用:CodeIgniter的認證概念問題

$this->session->set_flashdata('return_url', current_url()); 

不幸的導致問題。每當用戶在瀏覽器中打開多個選項卡時,該變量將被覆蓋,並且成功登錄後,用戶將被重定向到所有選項卡中的相同URL。

所以我的問題是:是否可以在MY_Controller中加載自定義控制器?MY_Controllerextends CI_Controller類)

我使用(的MY_Controller在構造函數中)嘗試,但它並沒有制定出:

$CI =& get_instance(); 
$CI->router->set_class('authentication'); 
$CI->router->set_method('login'); 

編輯:我會很高興解決這個問題的任何其他的想法。

+0

不,在CI中,您不能與另一個控制器通話。 –

+0

爲什麼不使用自動加載的模型進行身份驗證?我將我的身份驗證系統編寫爲模型並自動加載,並且從未遇到任何問題。我甚至在構造方法中定義了定義,這甚至可以讓我的代碼更加整潔,更易於閱讀。 – Arda

回答

2

一個解決方案不會在會話var中保存返回url,而是在get/post參數中傳遞它(如果獲得,正確編碼,base64 ie)。如果沒有(有效)返回url設置,唯一的補充就是標準返回url

---編輯 爲什麼我在談論base64的時候php只有這個函數; urlencode是你的朋友! http://nl3.php.net/urlencode

+0

'base64'的散列包含斜槓,它與codeigniter的url混淆 – Teneff

+0

我設法避免這種斜線問題,在編碼之後用散列中的感嘆號替換所有斜線,並在解碼字符串之前對其進行反轉。 – Teneff

0

當您將未登錄的用戶重定向到登錄頁面時,請保留一個隱藏變量「redirect_to」,該變量將保存用戶到達的位置的值。可以使用$ _SERVER ['HTTP_REFERRER']。然後登錄後,只需重定向到「redirect_to」的值即可。這樣你就不需要設置flashdata來重定向用戶來自他們來的url。

+0

它是'$ _SERVER ['HTTP_REFERER']',當你用php頭重定向用戶時不能使用它 – Teneff