class CCC {
public function aaa() {
return $_SESSION['rrr'];
}
public function abc() {
$_SESSION['rrr'] = 123;
return $_SESSION['rrr']; // 123
}
}
遇到個有趣的問題
我使用 postman 直接打API先執行 abc()
然後再執行 aaa() 可以取得到 123
但我在把網頁上傳到伺服器用 domain 訪問 或是 localhost 訪問該API,執行 abc 可以取得到 123 ,但 執行 aaa() 卻取得不到 123 而是空的?
有人知道這是遇到了什麼問題嗎?
謝謝
SESSION有個特性,就是先載入處理。
很多人常沒注意到這件事。
當session給值時。只是宣告SET。
但其實已拿到的SESSION值並不會有所改變。
只要還未再經過start或是重運行或其它方式重新宣告或給值的情況。
其SESSION值是有機會還是拿到舊的值。
正規的SESSION應用,最好是在載入時給於一個變數承載。
目前一般來說是用物件處理。
如果依照你的程式碼來改寫的話,我大略會寫成如下
class CCC {
protected $session;
public function aaa() {
return $this->session['rrr'];
}
public function abc() {
$this->session['rrr'] = '123';
$_SESSION = $this->session;
return $this->session['rrr']; // 123
}
}
當然,上面的寫法只是帶出一些觀念。正統會搭配 set 與 get 來拿值處理。
而不會給與特定值為主。