Symfony:以JSON存储会话

时间:2018-04-25 10:55:34

标签: php json symfony session redis

在我的Symfony应用程序中,我正在使用NodeJS& socket.io用于构建聊天功能并发送实时通知。为此,我使用Redis以JSON格式存储会话,以便可以在Javascript中轻松解析。

ProductData = new ObservableCollection<object>(SomethingThatReturnsClassAList());

问题是会话未正确编码,尤其是用户信息(身份验证部分)。

Symfony存储会话:

.border {
  border: solid 1px;
  border-color: inherit !important;
}

.border-none {
  border: none !important;
}

JSON编码会话:

public function read($session_id) {
    $tmp = $_SESSION;
    $_SESSION = json_decode($this->client->get(self::PREFIX . $session_id), true);

    if (isset($_SESSION) && !empty($_SESSION) && $_SESSION != null) {
        $encoded_data = session_encode();
        $_SESSION = $tmp;

        return $encoded_data;
    }

    return '';
}

public function write($session_id, $session_data) {
    $tmp = $_SESSION;
    session_decode($session_data);
    $decoded_data = $_SESSION;
    $_SESSION = $tmp;

    $this->client->setex(self::PREFIX . $session_id, $this->ttl, json_encode($decoded_data));

    return true;
}

Symfony不使用PHP内置存储机制吗?我在这里做错了什么?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在会话中存储更简单的方法:在您的客户端实体中实现\ Serializable然后编写序列化和反序列化函数示例:

function focusInputelement(id) {
        window.setTimeout(() => {
              document.getElementById(id).focus();
        }, 500);
    }

在此之后你几乎可以在任何地方使用它

class Client implements \Serializable{
public function serialize()
{
    return serialize([
        $this->id,
        $this->name,
        $this->color
    ]);
}

public function unserialize($serialized)
{
    list (
        $this->id,
        $this->name,
        $this->color
        ) = unserialize($serialized);
}}

添加您想要序列化和反序列化函数的任何其他必填字段