Какова длина строки идентификатора сессии PHP?
Я делаю таблицу в базе данных MySQL, чтобы сохранить некоторые данные сеанса, в том числе session_id
, Какой должна быть длина VARCHAR
хранить session_id
строка?
6 ответов
Зависит от 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 генерирует свои идентификаторы сеансов, и проверить, является ли он криптографически безопасным. Если это не так, то вы должны использовать свой собственный алгоритм с криптографически безопасным источником случайности.
При обычной установке php длина всегда равна 26 (например: psprdaccghmmre1oo2eg0tnpe6)
Начиная с PHP 7.1, при использовании session_create_id() длина идентификатора сеанса по умолчанию составляет 32 символа, однако пользователь может изменить это значение по умолчанию в php.ini.
в php.ini.См. настройку session.sid_length
Я не знаю, где будет использоваться мое приложение, тогда я настроил его как: VARCHAR(127) и надеюсь, что оно отлично подойдет для неизвестных пользователей MySQL.