[PHP]SESSION搭配轉址要注意的事

  • 802
  • 0

摘要:[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新手的我真的是太粗心了......