是的,我知道,另一個HTTP_REFERER努力。當我看到它時,我會畏縮。但它已交給我作爲一個'回'問題的解決方案,它實際上是有效的,所以...PHP後退按鈕的最終HTTP_REFERER解決方案?
...問題是,我不明白它足以讓它感覺舒服地部署它住。
我在這裏經歷了很多關於HTTP_REFERER風險的消息,但是我被告知這個代碼解決了這個特定任務的問題......但我並不確信。
所以,我的問題是,在下面的代碼的底部 - 但首先,這裏是它背後的基礎:
這個代碼進入購物車。它提供用戶點擊「查看購物車」後「繼續購物」按鈕的操作。其目標是提供最適合(或預期)的重定向回到用戶來自哪裏。
默認情況下,如果未添加此代碼,此特定「查看購物車」頁面的「繼續購物」按鈕只會將用戶帶到購物車的主頁 - 如果用戶導航了幾頁深入尋找一套產品或特定類別,或正在尋找產品等等。所以我們想要改進這一點。另外,購物車需要JavaScript完成購買,如果用戶使用JS關閉訪問,用戶會收到警告,因此在此操作期間,用戶期望JS on。最後,我們希望將解決方案保留在單個代碼塊中,因此可以輕鬆應用並將其運送到購物車的更新版本中,而且幾乎沒有問題。
,因爲它是向我描述方法:
如果引薦設置,它不是空的,是的,它包含此車的域,然後
1A。如果引用者是購物車頁面本身,則應用javascript(-1)效果,否則我們將被卡在一個地方
1b。 ELSE繼續並應用Referer - Done。
否則,如果A設置,並參考它不是空的,但沒有它不包含此車的域,然後
2A。有什麼不對勁,請將它們發送到主頁。 (??爲什麼??)
2b。 ELSE讓我們應用javascript(-1)效果。 - 完成。
代碼:
if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) === 0))) {
if ($_SERVER['HTTP_REFERER'] == HTTP_SERVER . 'index.php?r=cart') {
$this->data['continue'] = 'javascript:history.go(-1)';
}
else {
$this->data['continue'] = html_entity_decode($_SERVER['HTTP_REFERER']);
}
}
else {
if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) !== 0))) {
$this->data['continue'] = 'index.php?r=home';
}
else {
$this->data['continue'] = 'javascript:history.go(-1)';
}
}
我的問題:
好了,我們已將兩個可疑的方法,和集體似乎工作。但是這個(安全/功能)會出什麼問題呢?我在這裏有一個showstopper,我失蹤了?
第二部分(2.和2a)將完成什麼?這是向我解釋,以確定是否有人故意試圖餵養一個錯誤的引薦者 - 但它對我來說沒有意義 - 爲什麼我們關心將該人路由到主頁與使用JavaScript( -1)方法?
有關改進的任何想法?那些總是在handly ;-)
感謝您在本幫助時...
referer由客戶提供,並不可靠。你可能會有更好的運氣存儲在會話變量中查看的最後一頁。 – dqhendricks 2011-05-06 17:59:33
你好,謝謝...這是這篇文章的關鍵點......通過檢查引用者(1)是否存在,(2)是否爲空,以及(3)是否包含*購物車的域名,然後默認爲javascript方法......它也符合我們自我包含的要求。我知道有更好的解決方案,涉及會話變量等,但在這種情況下,我試圖專注於此http_referer版本,以查看它是否可行在這個應用程序中或不... – Soyo 2011-05-06 18:18:13
永遠不要依賴JavaScript作爲倒退! – 2011-05-06 19:22:31