Я делаю таблицу в базе данных MySQL, чтобы сохранить некоторые данные сеанса, включая session_id
. Какова должна быть длина VARCHAR
для хранения строки session_id
?
Зависит от session.hash_function и session.hash_bits_per_character .
Зайдите на страницу session_id для получения дополнительной информации.
Чем выше вы установите session.hash_bits_per_character, тем короче ваш session_id станет, используя больше бит на символ. Возможные значения: 4, 5 или 6.
При использовании sha-1 для хэширования (путем установки ini_set ('session.hash_function', 1) следующие три строковые строки сеанса создаются тремя параметрами session.hash_bits_per_character:
4 – 40 символьная строка
5 – 32 символьная строка
6 – 27 символов
Ответ @sachleen не заполнен.
Более подробная информация о длине идентификатора сеанса описана здесь .
Резюме:
128-bit digest (MD5) 4 bits/char: 32 char SID 5 bits/char: 26 char SID 6 bits/char: 22 char SID 160-bit digest (SHA-1) 4 bits/char: 40 char SID 5 bits/char: 32 char SID 6 bits/char: 27 char SID
И пример регулярного выражения для проверки идентификатора сеанса:
preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId)
Это зависит от этих параметров конфигурации: session.hash_function и session.hash_bits_per_character
Более короткие длины идентификаторов сеансов имеют более высокую вероятность столкновения, но это также сильно зависит от алгоритма генерации идентификатора. Учитывая настройки по умолчанию, длина идентификатора сеанса должна соответствовать большинству приложений. Для реализаций более высокой безопасности вы можете подумать о том, как PHP генерирует свои идентификаторы сеансов и проверяет, является ли это криптографически безопасным. Если это не так, тогда вам нужно свернуть собственный алгоритм с криптографически безопасным источником случайности.
Я не знаю, где будет использоваться мое приложение, поэтому я установил его как: VARCHAR (127) и надеюсь, что это будет отлично для пользователей UnKnown MySQL.
При обычной установке php длина всегда равна 26 (exmp: psprdaccghmmre1oo2eg0tnpe6)