摘要:[PHP]SESSION搭配轉址要注意的事
雖然步驟很簡單,但是卻害我研究很久......
狀況是:設定SESSION後,轉址卻無法抓到SESSION的值......
假設網頁有:a.php->用來設定SESSION的網頁,b.php->用來取得SESSION的值並且做判斷(比方是否登入成功)
一般來說,設定SESSION後就是全域變數了,
可是卻忽略了SESSION重新建立的時候:一連結到網站時。
因此如果你關掉網頁然後再重新連結時,事實上你的SESSION已經重新建立了。
所以,如果你是為了登入而設定SESSION,然後轉址的話,記得要將轉址的網址設定成相對路徑,
否則PHP會以為你重新連結網站而重設,那麼即使你的SESSION資料建立了,轉址後的網頁反而是用新的SESSION(也就是你設的SESSION變成前一個網站連結使用的變數)。
雖然解釋不是很專業,但就是轉址要用相對路徑就對啦!
確切的案例是這樣的,
我使用GOOGLE API登入我的網頁,
在data/google.php取得使用者google帳號(email形式)後,設定了SESSION:SESSION['EMAIL']=使用者帳號;
接著我就轉址啦: header("Location: www.xxx.com.tw/main.php");
這main.php加入了會判斷是否有SESSION('EMAIL')值的判斷,若沒有,則會跳到index.php首頁。
然而就是上面的做法害我研究將近兩三個星期......
正確應該要寫成: header("Location: ../main.php");
(因為main.php在google.php的上一個資料夾裡面)
由於不熟SESSION,才會造成這樣的失誤(真是走錯好多路呀)。
用英文上網查,照做也沒用,原來原因不是我使用GOOGLE API的方式不對,也不是我使用SESSION的方法不對,
而是轉址部分忽略了SESSION變數的生命週期改變!
覺得SESSION新手的我真的是太粗心了......