Как десериализовать данные таблицы modx_session?

Modx хранит данные своего сеанса в базе данных, сериализованные [в каком-то формате] в таблице modx_session.data table.column. Это выглядит так:

modx.user.0.resourceGroups | а: 1: {s: 3: «паутина»; а: 8: {я: 0; s: 2: «10»; я: 1; s: 2: «12»; я: 2; s: 2: «13»; я: 3; s: 2: «14»; я: 4; s: 1: «3»; я: 5; s: 1: «7»; я: 6; s: 1: «8»; я: 7; s: 1: «9»;}} modx.user.0.attributes | а: 1: {s: 3: «паутина»; а: 4: { с: 16: «modAccessContext»; а: 1: {s: 3: «паутина»; а: 1: {я: 0; а: 3: {s: 9: «Основной»; я: 0; s: 9 : «орган»; s: 1: «0»; s: 6: «политика»; а: 1: {s: 4: «нагрузки», б: 1;}}}} s: 22: «modAccessResourceGroup»; а: 8: {я: 10; а: 1: {я: 0; а: 3: {s: 9: «Основной»; я: 0; s: 9: «орган»; s: 1: «0» ; s: 6: «политика»; а: 1: {s: 4: «нагрузки», б: 1;}}} я: 12; а: 1: {я: 0; а: 3: {s: 9 :; «главный» я: 0; s: 9: «орган»; s: 1: «0»; s: 6: «политика»; а: 1: {s: 4: «нагрузка»; б: 1; }}} я: 13; а: 1: {я: 0; а: 3: {s: 9: «Основной»; я: 0; s: 9: «орган»; s: 1: «0»; s : 6: «политика»; а: 1: {s: 4: «нагрузки», б: 1;}}} я: 14; а: 1: {я: 0; а: 3: {s: 9:» Основной «; я: 0; s: 9:» орган «;: 1: с» 0 «; s: 6:» политика «; а: 1: {s: 4:» нагрузки «, б: 1;}} } я: 3; а: 1: {я: 0; а: 3: {s: 9: «Основной»; я: 0; s: 9: «орган»; s: 1: «0»; s: 6 : «политика»; а: 1: {s: 4: «нагрузки», б: 1;}}} я: 7; а: 1: {я: 0; а: 3: {s: 9: «Основной» ; я: 0; s: 9: «орган»; s: 1: «0»; s: 6: «политика»; а: 1: {s: 4: «нагрузки», б: 1;}}} я : 8; а: 1: {я: 0; а: 3: {s: 9: «Основной»; я: 0; s: 9: «авт оритет «; s: 1:» 0 «; s: 6:» политика «; а: 1: {s: 4:» нагрузки «, б: 1;}}} я: 9; а: 1: {я: 0; а: 3: {s: 9: «Основной»; я: 0; s: 9: «орган»; s: 1: «0»; s: 6: «политика»; а: 1: {s: 4: «нагрузки», б: 1;}}}} s: 17: «modAccessCategory»; а: 0: {} s: 28: «sources.modAccessMediaSource»; а: 0: {}}} modx.user. contextTokens | а: 0: {} this_anonymous_pagecount | я: 2;

Это запись сеанса для анонимного пользователя.

В каком формате он находится и как его десериализовать?

обычный php unserialize ($ modx_session [‘data’]) возвращает false.

0

Решение

Так как MODX modSession распространяется как xPDOObject, так что, вероятно, лучше всего прочитать его через некоторый код объектов xPDO / MODX.

ОБНОВИТЬ: Благодаря @ Ясон-трус Способ декодирования данных сеанса или использования его в ваших фрагментах MDOX и т. Д. Ниже:

modSession->get(‘data’)

Но если мы пойдем по vanilla php route, я получу данные декодированный через php session_decode функция.

Быстрый код php:

<?php
session_start();
$input = 'modx.user.0.resourceGroups|a:1:{s:3:"web";a:8:{i:0;s:2:"10";i:1;s:2:"12";i:2;s:2:"13";i:3;s:2:"14";i:4;s:1:"3";i:5;s:1:"7";i:6;s:1:"8";i:7;s:1:"9";}}modx.user.0.attributes|a:1:{s:3:"web";a:4:{s:16:"modAccessContext";a:1:{s:3:"web";a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}}s:22:"modAccessResourceGroup";a:8:{i:10;a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}i:12;a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}i:13;a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}i:14;a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}i:3;a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}i:7;a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}i:8;a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}i:9;a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}}s:17:"modAccessCategory";a:0:{}s:28:"sources.modAccessMediaSource";a:0:{}}}modx.user.contextTokens|a:0:{}this_anonymous_pagecount|i:2;';
$output = session_decode($input);
$ses = $_SESSION;
echo "<pre>";
print_r($ses);
?>

Вот декодированные данные:

Array
(
[modx.user.0.resourceGroups] => Array
(
[web] => Array
(
[0] => 10
[1] => 12
[2] => 13
[3] => 14
[4] => 3
[5] => 7
[6] => 8
[7] => 9
)

)

[modx.user.0.attributes] => Array
(
[web] => Array
(
[modAccessContext] => Array
(
[web] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

)

[modAccessResourceGroup] => Array
(
[10] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

[12] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

[13] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

[14] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

[3] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

[7] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

[8] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

[9] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 0
[policy] => Array
(
[load] => 1
)

)

)

)

[modAccessCategory] => Array
(
)

[sources.modAccessMediaSource] => Array
(
)

)

)

[modx.user.contextTokens] => Array
(
)

[this_anonymous_pagecount] => 2
)

Связанная информация:

класс modSession https://github.com/modxcms/revolution/blob/master/core/model/modx/modsessionhandler.class.php#L170

Документы API ModSession http://api.modx.com/revolution/2.2/db_core_model_modx_modsession.class.html#%5CmodSession

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]