2016-12-04 118 views
0

我想爲使用類的用戶建立一個持久會話,但似乎我無法使其工作。目前,我有這樣的:持續PHP會話

<?php 
class Session { 
    private $sessionId = NULL; 

    public function __construct() { 
     session_start(); 
     if($this->sessionId === NULL) 
      $this->sessionId = session_id(); 
     return $this->sessionId; 
    } 

    public function getSessionValue($field) { 
     return $_SESSION[$field]; 
    } 

    public function setSessionValue($field, $data) { 
     $_SESSION[$field] = $data; 
    } 

    public function removeSessionValue($field) { 
     unset($_SESSION[$field]); 
    } 

    public function destroySession() { 
     $this->sessionId = NULL; 
     session_destroy(); 
    } 

    public function __toString() { 
     return $this->sessionId; 
    } 
} 
?> 

但它發生時,我將用戶重定向到另一個domanin這樣他就可以付款,他就失去了它的會話,當他回到自己的網站。目前,我與setSessionValue('paymentid', 1)方法從這個類保存了一些數據,使用JavaScript重定向,並且當它回來的時候,我有這樣的代碼來檢查,如果他有一個會話值:

$session = new Session(); 
if($session->getSessionValue('paymentid') !== null) { 
// Do something here 
} 

它返回我一個空paymentid。奇怪的是,它有時是有效的,但並不總是這樣,所以......這可能是什麼錯誤?

+1

如果「其他域」只是一個子域,那麼您需要確保cookie已經存儲在正確的域屬性中,然後使用sessid =>向您發送一個cookie。請注意,domain = siteA.com的cookie不可用於siteB.com – Federkun

+0

https://stackoverflow.com/questions/17242346/php-session-lost-after-redirect?rq=1 –

回答

0

仔細檢查您的代碼,以在頁面之間移動用戶。您可能會無意中重置會話變量中的id值。我發現在我的頁面上執行var_dump $ _SESSION很有幫助,以查看我的變量發生了什麼。至於它爲什麼有效,它可能是例如從已取消的事務返回用戶的代碼與成功的代碼不同。查看保留id變量的代碼,因爲這是你想在其他地方應用的代碼。

+0

該代碼沒有隨時重寫。我會在打電話給付款網址之前和之後放置一個print_r來記錄$ _SESSION,但這很奇怪,因爲它很少發生,並且只發生在某些人身上,我不明白,因爲這是一個基於服務器的會話 – Xabi