持久的PHP会话

时间:2016-12-04 12:10:19

标签: php session

我想使用类为用户创建一个持久会话,但似乎我无法使其工作。目前,我有这个:

<?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
}

这给了我一个空虚的工资。奇怪的是,它有时会起作用,但它并不是一直都有,所以...这有什么不妥?

1 个答案:

答案 0 :(得分:0)

仔细检查在页面之间移动用户的代码。您可能无意中重置了会话变量中的id值。我觉得在我的网页上做var_dump $ _SESSION很有帮助,看看我的vars发生了什么。至于为什么它在某个时候有效,可能是例如从取消的交易中返回用户的代码与成功的交易不同。查看保留id var完整的代码,因为那是你要在其他地方应用的代码。