Symfony: تخزين الجلسات في JSON

In my Symfony application, I'm using NodeJS & socket.io to build a chat feature and send real-time notifications. For this, I'm using Redis to store sessions in JSON format so it can be easily parsed in Javascript.

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 المخزنة:

"_sf2_attributes|a:2:{s:18:\"_csrf/authenticate\";s:43:\"Fc3iwpceqYiNmAn1FbUyQyaEPdu7qbI_unu5dBAgaTg\";s:14:\"_security_main\";s:456:\"C:74:\"Symfony\\Component\\Security\\Core\\Authentication\\Token\\UsernamePasswordToken\":368:{a:3:{i:0;N;i:1;s:4:\"main\";i:2;s:328:\"a:4:{i:0;C:21:\"AppBundle\\Entity\\User\":127:{a:5:{i:0;i:52;i:1;s:12:\"user123\";i:2;s:60:\"$2y$13$mgT//whXPFsj7b0XCAWhdeiC2oGZqojiAzky.6sThuN6MI9zALt1.\";i:3;i:1;i:4;i:1;}}i:1;b:1;i:2;a:1:{i:0;O:41:\"Symfony\\Component\\Security\\Core\\Role\\Role\":1:{s:47:\"\x00Symfony\\Component\\Security\\Core\\Role\\Role\x00role\";s:9:\"ROLE_USER\";}}i:3;a:0:{}}\";}}\";}_sf2_flashes|a:0:{}_sf2_meta|a:3:{s:1:\"u\";i:1524485577;s:1:\"c\";i:1524485576;s:1:\"l\";s:1:\"0\";}"

جلسة عمل JSON المشفرة:

"{\"_sf2_attributes\":{\"_csrf\\/authenticate\":\"hvNt4SQIm7IArE57JgHyuVSCLlt4hrw1D-PVC_kBfKA\",\"_security_main\":\"C:74:\\\"Symfony\\\\Component\\\\Security\\\\Core\\\\Authentication\\\\Token\\\\UsernamePasswordToken\\\":368:{a:3:{i:0;N;i:1;s:4:\\\"main\\\";i:2;s:328:\\\"a:4:{i:0;C:21:\\\"AppBundle\\\\Entity\\\\User\\\":127:{a:5:{i:0;i:52;i:1;s:12:\\\"user123\\\";i:2;s:60:\\\"$2y$13$mgT\\/\\/whXPFsj7b0XCAWhdeiC2oGZqojiAzky.6sThuN6MI9zALt1.\\\";i:3;i:1;i:4;i:1;}}i:1;b:1;i:2;a:1:{i:0;O:41:\\\"Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\\":1:{s:47:\\\"\\u0000Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\u0000role\\\";s:9:\\\"ROLE_USER\\\";}}i:3;a:0:{}}\\\";}}\"},\"_sf2_flashes\":[],\"_sf2_meta\":{\"u\":1524651793,\"c\":1524651793,\"l\":\"0\"}}"

لا تستخدم Symfony آلية التخزين المدمج في PHP؟ ماذا أفعل الخطأ هنا؟

أي مساعدة يحظى بتقدير كبير.

0
هل قمت بمراجعة هذه الحزمة؟ github.com/snc/SncRedisBundle ؛)
وأضاف المؤلف Mcsky, مصدر

1 إجابة

هناك طريقة أسهل لتخزينها في الجلسة: في كيان العميل الخاص بك ، قم بتنفيذ \ Serializable ثم اكتب التسلسل الوظيفي و unerialize الدالات على سبيل المثال:

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);
}}

بعد هذا يمكنك استخدامها في كل مكان تقريبا مثل هذا

$this->session->set('client',$client);
$this->session->get('client');

إضافة أي حقول مطلوبة أخرى تريد إجراء تسلسل لها وإلغاء تسلسلها

0
وأضاف
تنفيذ فئة \ Serializable على كيان المستخدم؟
وأضاف المؤلف codeit, مصدر
$ this-> العميل هنا هو عميل redis (predis). كيف سيحل هذا مشكلتي الحقيقية في قراءة بيانات الجلسة في javascript؟
وأضاف المؤلف codeit, مصدر
كيف سيحل مشكلتي الحقيقية في قراءة بيانات الجلسة في javascript؟
وأضاف المؤلف codeit, مصدر
في الواقع ، لقد أضفت العميل منذ استخدام العميل
وأضاف المؤلف Yamen Nassif, مصدر
تنفيذ serializable لأي كيان تريد تخزينها في الجلسة ، المستخدم ، العميل إلخ ...
وأضاف المؤلف Yamen Nassif, مصدر
نعم سيئة بلدي ، نسيت عن redis. ثم نعم تطبيق serializable كيان المستخدم هذا يجب إصلاحه
وأضاف المؤلف Yamen Nassif, مصدر
سأقوم بتحرير الجواب قريبا عندما أعود على جهازي
وأضاف المؤلف Yamen Nassif, مصدر
تعمل serilazing دائمًا مع هذا النوع من المشكلات: يرجى الرجوع إلى gist.github.com/pulse00/4204440</و>
وأضاف المؤلف Yamen Nassif, مصدر