2010-12-08 48 views
1

我有一個使用數據庫支持會話的Code Igniter項目。 Web應用程序受密碼保護,這意味着我有一個抽象控制器檢查用戶是否登錄,然後我允許他看到除登錄表單之外的任何頁面。代碼點火器 - 登錄後如何重定向用戶?

儘管我沒有實現這個問題,但我很難理解如何讓應用程序將用戶重定向到他想查看的頁面,以查看他是否需要先登錄。

它是怎麼回事:用戶註銷並鍵入一個URL。應用程序檢測到他未登錄,因此請將其發送到登錄頁面並在ci_session表中創建一行。同時,我使用flashdata或userdata存儲用戶在會話對象中輸入的url。我的問題是,一旦用戶登錄,應用程序將在數據庫中創建一個新行,這意味着一個新的會話,完全忽略了先前存儲的值。

不應該是每個會話一行嗎?

+1

嗯。 [這個答案](http://stackoverflow.com/questions/2130361)似乎建議事情應該如你所料,正確? – 2010-12-08 15:41:58

回答

0

解決它。

我的問題不是如何重定向或如何存儲數據。我的問題是應用程序爲每個請求創建兩個會話。

我將我的cookie的名稱更改爲不包含下劃線和瞧的東西,修正了。每個請求一個會話,一切正常。

0

你可以像這樣的用戶。

當用戶試圖訪問像

http://test.com/userpage.php 

頁面如果他沒有登錄,重定向他

http://test.com/login.php?redirectpage=userpage.php 

(此重定向將被userpage.php檢查後進行從cookie或會話登錄狀態。)

登錄頁面的值爲「redirectpage」,一旦用戶登錄登錄頁面,將他重定向到他之前爲tr的頁面應該去參觀。

您必須檢查你需要的用戶的所有頁面的用戶登錄狀態,以先登錄。

2

的CI URL助手具有您可以使用重定向功能。 http://codeigniter.com/user_guide/helpers/url_helper.html

是否將「標題重定向」指定爲本地URI?就像這個幫手中的其他函數一樣,這個函數被設計爲重定向到您網站中的本地URL。您不會指定完整的站點URL,而只是指向您要指向的控制器的URI段。該函數將根據您的配置文件值構建URL。

可選的第二個參數允許您在「位置」方法(默認)或「刷新」方法之間進行選擇。位置更快,但在Windows服務器上,它有時會成爲問題。可選的第三個參數允許您發送特定的HTTP響應代碼 - 例如,這可用於爲搜索引擎創建301重定向。默認的響應代碼是302.第三個參數僅適用於'位置'重定向,而不是'刷新'。例子:

if ($logged_in == FALSE) 
{ 
    redirect('/login/form/', 'refresh'); 
} 

// with 301 redirect 
redirect('/article/13', 'location', 301); 
+0

我的問題不是重定向 - 我可以輕鬆地做到這一點。我的問題是存儲和檢索用戶嘗試去會話的URL。 – ruipacheco 2010-12-08 15:39:44

+0

看看馬特在你的問題下面的評論中指出你的答案。您可以將重定向網址存儲在會話中。 – 2010-12-08 16:27:36

2

我認爲你誤會了瀏覽器和你的web應用程序之間的會話是如何工作的。當用戶打開登錄頁面時,他們被分配一個唯一的會話ID,codeigniter會跟蹤它。除非您的會話過期,否則強制退出或由於您自己的會話過期設置,codeigniter應該只在數據庫中每個唯一會話中寫入1行。確保你的config.php中的sess_expiration變量設置爲真實的。

我不明白如何從您的cookie名稱中刪除下劃線可以解決此問題,因爲名稱與會話的工作方式無關。