| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Проблема с unserialize |
| Автор: lancelot555 9.1.2006, 14:21 | ||||
В общем есть скрипт авторизации построенный на куках. В index.php есть форма для ввода логина пароля, затем создается кука
На остальных страницах вот такой код проверяет логин пароль:
На локальном сервере все работает как надо, но хосте не работает... Кука создается, к примеру если написать echo $auth; то выводится сериализнутый массив а если сделать $mass=unserialize($auth); то почему то функция не выполняется, то есть массис mass оказывается пустым и echo mass['login'] не выводит ничего |
| Автор: Mal Hack 9.1.2006, 14:42 |
| Пароль охранять в сессию не надо. Глянь тут: http://vingrad.ru/PHP-ART-002849, что надо сохранять в куки. |
| Автор: Cheba 9.1.2006, 14:45 |
| Это глюк PHP. Бывает, что у него не получается рассериализировать свой же массив. Редко, но бывает. Я так и не нашел закономерности... |
| Автор: Mal Hack 9.1.2006, 14:57 |
| Cheba сколько исходных комбинация может быть для результата md5? Вот тут в принципе такая же фигня. |
| Автор: Cheba 9.1.2006, 16:23 |
| Mal Hack, не то. MD5 - это хеш. Он из любой строки (любой длины) сделает тебе хеш в 128 бит. Потому и есть разные строки для которых хеш одинаков. Serialize - совсем другое дело. Он как-раз для того и был придуман, чтобы восстанавливать структуру массива из строки. Он сохраняет структуру, типы и длины элементов. Длина сериализированного массива (строки - результата serialize) всегда длиннее суммы длин элементов массива в строковом представлении. Это именно глюк, к сожалению. |
| Автор: Mal Hack 9.1.2006, 17:41 |
| Хм... Но ведь смысл похож. В принципе, мы же просто шифруем массив, и пытаемся потом расшифровать. При этом КЛЮЧ он нигде не хранит... Хотя фиг его знает, как это во внутреннем представлении PHP сделано. |
| Автор: Cheba 9.1.2006, 22:11 |
| Не похож смысл. Попробуй из md5 (да вообще из любого хеша) достать исходную строку. |
| Автор: Mal Hack 9.1.2006, 22:50 |
| Cheba это-то понятно, что из md5 ты ничего не достанешь. Я имел ввиду другое. Мы один и тот же хэш можем получить разными входными строками. Вот в сериализации ИМХО, может быть тоже самое. |
| Автор: Cheba 10.1.2006, 00:13 |
| Не должно быть такого. Именно для того и придумывали serialize/unserialize чтобы иметь однозначный результат. Можешь воспринимать это как двустороннее шифрование по пустому ключу. |
| Автор: Alone 10.1.2006, 03:09 |
| кстати, serialize ничего не шифрует. Для эксперимента попробуй вывести результат на экран... serialize() возвращает строку с байтово-поточным представлением значения value, которое может храниться где угодно. Это используется для хранения или передачи PHP-значений повсюду без потери их типа и структуры. |
| Автор: Cheba 10.1.2006, 13:37 |
| Я знаю, но аналогия вполне уместна ведь по сути это преобразование формата данных. Вот только проблема в том, что unserialize'у не всегда удается восстановить структуру исходных данных. |
| Автор: RaZoR 11.1.2006, 08:11 | ||
попробуй так:
|
| Автор: Wiedzmin 30.1.2006, 14:08 | ||
Что делать если такое выходит? В сериализованом массиве есть тексты не такой уж маленькой длины... |
| Автор: therik 23.10.2006, 17:32 |
| В общем нашел я в чем проблема. На самом деле когда в сериализованной строке встречаются кавычки, то php перестает их десериализировать.Выход один обрабатывать сериализуемые данные и удалять кавычки, ну либо еще что придумать, добавляя слэш, не дали заметного результата. |
| Автор: Vovarza 24.4.2010, 01:41 | ||
Cпасибо, помогло! |
| Автор: SickFxck 24.4.2010, 20:53 | ||
Феерический бред! |