iT邦幫忙

0

php 在 class function 內使用 session ,用postman可以,用網域訪問失效?

  • 分享至 

  • xImage
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 而是空的?
有人知道這是遇到了什麼問題嗎?
謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2021-12-20 09:08:32
最佳解答

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 來拿值處理。
而不會給與特定值為主。

我要發表回答

立即登入回答