2010-11-23 143 views
3

這裏是我的網頁:什麼導致重定向循環?

重定向頁面: 如果用戶有一個開放的會議,重定向到合適的資源 否則重定向到登錄頁面

登錄頁面: 如果用戶登錄信息是有效的,重定向到$ _SERVER ['HTTP_REFERER'] 其他顯示登錄頁面

當您訪問重定向頁面時,它看到您沒有有效會話並重定向到登錄頁面。然後您可以登錄沒有問題,但在身份驗證後,我收到「此網頁有一個重定向循環。」在Chrome中的頁面。 (IE提供有效的登錄細節並轉到目標資源,提供無效登錄和接收錯誤消息等),這不是真正的循環。但是我可以看到瀏覽器的困惑(從a到b再到a)。

任何想法如何我可以解決這個問題?

乾杯

+1

問題可能出在$ _SERVER ['HTTP_REFERER'],你可能想在這裏使用實際路徑.. ??如果我的推薦人是你的重定向腳本,並且我有一個有效會話,它會看到會話有效並將我重定向到以前的重定向腳本。我希望我的應用程序架構正確 – 2010-11-23 19:39:38

回答

5

$ _ SERVER [「HTTP_REFERER」]永遠是登錄頁面,因爲你必須加載登錄頁面在您成功登錄權利之前。因此,一旦您成功登錄,引用者就是登錄頁面,因此登錄頁面會將您重定向到您仍然成功登錄的登錄頁面,因此它會一遍又一遍地記錄您。

而不是依靠$ _SERVER ['HTTP_REFERER']你應該存儲他們試圖獲得的頁面$ _SESSION或$ _COOKIE變量。根據您的設置,最有可能的會話會更好。

+0

這是原因,謝謝! – 2010-11-23 19:44:16

+0

不客氣。我以前做過同樣的事情。 – 2010-11-23 19:46:09

0

您可以讓您的登錄頁面一次完成重定向(無需重定向回「重定向頁面」)。

1

我的猜測是:

如果用戶有一個會議,但不是有效的(例如:會話哈希不匹配),它就會被重定向到登錄頁面(因爲他有一個會話)。但是當他到達那裏時,你檢查他是否有一個會話,他確實(但它不是有效的),所以你將他重定向到索引資源。在那裏,你檢查會話是否有效,但事實並非如此。所以你將他重定向到登錄頁面。等等......

如何解決它?在登錄頁面和其他資源中檢查會話有效性(不僅僅是存在)。

當然,如果HTTP_REFERER登錄,忽略它並轉發到索引資源。

1

您應該經常檢查$ _SERVER ['HTTP_REFERER']變量是否包含有效數據,因爲用戶代理提供此值,所以它不會被信任。

the php.net manual

The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted. 
2

提交您的登錄信息後,$_SERVER['HTTP_REFERER']將是你的登錄頁面的URL,因爲最後一頁的用戶看到的是形式對他們進行登錄。

在重定向到登錄頁面之前,請考慮在PHP會話中存儲'重定向到'網址。當你重定向到登錄頁面時,你也可以將它作爲參數傳遞,但是我可以看到具有潛在安全缺陷的方法(例如將用戶重定向到其他站點,添加虛假的HTTP頭等)

相關問題