2011年3月28日 星期一

[PHP] 上一頁的網址

在寫網頁程式的時候,常常會在某個時候用到"回上一頁"的功能。
雖然講得好像只要按瀏覽器左上角那個大大的箭頭就搞定了,但還是沒辦法滿足所有的需求,像是執行完一段程式之後要把畫面轉到前一張網頁去的時候,就沒辦法光靠左上角那個箭頭來完成。
而且,這樣的做法很爛,很沒有一個"系統"的樣子(為什麼一個稱為"系統"的東西,遇到沒有接下來的頁面而要回上一頁的時候還得要使用者自己點?)
像是在Bookle裡面,它的右上角一直有個login的連結可以點。我們寫程式的並不能知道使用者或從哪個頁面點到login,但是又希望經過login以後能夠回到正在瀏覽的頁面,"回到前一頁"的動作就變得不可或缺了。


在PHP裡,$_SERVER有很多有意思參數可以玩。
其中,$_SERVER["HTTP_REFERER"]就是指連到該頁面的前一個頁面是誰。
值得注意的是.....如果網址是用自己key的,這個參數就抓不到什麼東西。
所以要測試的話,要寫個兩張網頁a, b,從a連到b,b網頁裡叫出這個參數就可以看到a了。

by the way, referer這個字在一些網頁語言裡都有"連到該網頁的前一張網頁",也就是"上一頁"的意思。
asp有document.referer
php有$_SERVER["HTTP_REFERER"]

只是要回上一頁的話,javascript也有簡單的語法可以用:history.back(1),但是它的原理和referer不一樣。
referer是在網頁的標頭裡找"我是從哪個網址連過來的";而javascript用的這個history這個物件(好像有點像堆疊)裡把上一頁的網址直接抓出來。

不過referer這個參數好像不是這麼萬能,至少在php manual裡就明白寫出來這點了。
原因在此:[用PHP偽造網站referer地址]
簡單來說,就是可以用socket來修改網頁的標頭,改掉referer這個欄位裡的參數。








不過我在寫Bookle的時候就沒考慮這麼多了啦~ 只是一個小東西,沒必要為了細小的安全性問題把自己搞得很暈。
以後有需要的時候再來細細研究。

沒有留言: