Можно ли использовать идентификатор сеанса md5 или ключ memcache?

#php #session #memcached

#php #сессия #memcached

Вопрос:

Я получаю это предупреждение, когда объект хранения моего приложения настроен на сеанс.

Неизвестно: идентификатор сеанса слишком длинный или содержит недопустимые символы, допустимыми символами являются a-z, A-Z, 0-9 и ‘-,’ в Unknown в строке 0

поэтому я решил использовать идентификатор сеанса Md5, и теперь предупреждение исчезло. Но этот код является общим для всех вариантов хранения, таких как memcache и phparray. итак, мой вопрос в том, можно ли использовать ключи memcache Md5 или идентификаторы сеанса? создаст ли это какую — то другую проблему ? или есть какое — нибудь лучшее решение ?

Комментарии:

1. известно, что md5 подвержен конфликтам

2. Помните, что вы не можете отменить md5, так как же вы узнаете, какое значение впоследствии имел идентификатор сеанса? или знаете, какой ключ memcache использовать для извлечения данных из memcache?

3. У меня есть методы получения и установки для извлечения и хранения данных, и я передам ключ Md5 обоим методам для выполнения операции. и этот длинный ключ я получаю с другого сервера.

Ответ №1:

Для этого нельзя использовать md5, потому что бесконечное количество строк может привести к одному и тому же хэшу. Итак, вы не хотите этого делать!

Есть ли какое-либо лучшее решение?

ДА. Вместо того чтобы пытаться обойти свою проблему, решите ее! Ваш идентификатор сеанса содержит недопустимые символы или он слишком длинный! Создайте действительные идентификаторы сеанса!

Комментарии:

1. Спасибо Markus за ваш ответ. Дело в том, что я получаю некоторую информацию с другого сервера вместе с токеном, который я сохраняю в своей сессии в качестве ключа, и этот токен является единственным идентификатором информации, которую я получаю с сервера, поэтому у меня действительно нет никакого контроля, чтобы ее изменить.

2. Затем вы должны сопоставить внешний токен с вашим собственным допустимым токеном и использовать свой собственный токен для вашего сеанса.

3. Я понятия не имею, как мне сопоставить внешний токен с токеном, который я генерирую. Внешний токен — это идентификатор, который я могу извлечь и сохранить в сеансе или кэше. теперь, как я могу сопоставить свой собственный токен с внешним токеном для выполнения той же операции?

4. Создайте таблицу с полями (id, foreignToken, token). Всякий раз, когда вы общаетесь внутри своей собственной системы, используйте токен, всякий раз, когда вы общаетесь с этим внешним сервером, используйте foreignToken. Возможно, у вас также есть или вы предоставляете больше информации о природе этого внешнего токена и выясняете, почему это недопустимый токен. Возможно, вы делаете что-то не так с этим в первую очередь.

5. Мое приложение представляет собой своего рода библиотеку, и для этого не требуется база данных. Поскольку вы упомянули, что использование Md5 не в порядке, и у меня нет контроля для изменения ключей, что создает проблему для идентификатора сеанса, я изменю хранение токенов в memcache.