MySQL — Как я могу получить конкретную информацию из постоянного обработчика сеанса с PHP?

Я использую обработчик сессии PHP для реализации постоянной сессии на моем сайте.
Проблема в том, что в какой-то момент мне нужно вставить user_key в другую таблицу MySQL, и я не знаю, как извлечь эту информацию из кода.

Например, строка данных в моей таблице сеанса:

active|i:1487613760;user_username|s:20:"[email protected]";user_key|s:8:"a5186adc";authenticated|b:1;user_name|s:12:"victor";user_email|s:20:"[email protected]";remember|b:1;

и я хотел бы знать, есть ли простой способ получить переменную user_key.

Извините, если это немного сбивает с толку.

0

Решение

Первый вариант — десериализовать эту строку.
http://php.net/manual/en/function.unserialize.php

Второй вариант, вы можете использовать функцию preg_match со следующим шаблоном:

preg_match('/user_key\|s:\d+:"([a-zA-Z0-9]+)"/', $string, $match);
0

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

Я нигде не могу найти что-то для обработки этого формата сериализованной строки, это не то, что я видел раньше.

Тем не менее, вот быстрая функция, чтобы превратить его в массив (это может быть не слишком элегантно, но у меня только 1 кофе):

$string = 'active|i:1487613760;user_username|s:20:"[email protected]";user_key|s:8:"a5186adc";authenticated|b:1;user_name|s:12:"victor";user_email|s:20:"[email protected]";remember|b:1;
';

$array = deserializeSessionString($string);

echo $array['user_key'];

// deserialize a session string into an array
function deserializeSessionString($string)
{
$output = [];
// separate the key-value pairs and iterate
foreach(explode(';', $string) as $p) {
// separate the identifier with the contents
$bits = explode('|', $p);

// conditionally store in the correct format.
if(isset($bits[1])) {
$test = explode(':', $bits[1]);
switch($test[0]) {
// int
case 'i':
$output[$bits[0]] = $test[1];
break;
case 's':

// string
// ignore test[1], we dont care about it
$output[$bits[0]] = $test[2];
break;

case 'b':
// boolean
$output[$bits[0]] = ($test[1] == 1 ? true : false);
break;
}
}

}

return $output;
}

тогда вы сможете получить доступ к тому, что вам нужно, только с помощью ключа:

echo $array['user_key'];

вот пример

0

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