PHP如何在开始 session 之前计算 session ID的长度

标签 php session sessionid

如何根据 php.ini 值计算 PHP session ID 的长度 session.hash_function session.hash_bits_per_character ,并在开始 session 之前。

我想创建和分配自定义 session ID,如 session_id($customSessionId); , 在开始 session 之前。

在我的本地机器中值为session.hash_function为 0(MD5 的可能值为“0”,SHA-1 的可能值为“1”)和 session.hash_bits_per_character 的值为 5(可能的值为 '4' [0-9, a-f]、'5' [0-9, a-v] 和 '6' [0-9, a-z, A-Z, "-", ","]) ,得到的session id长度为26。

session.hash_function 时 session ID 的长度是多少?和 session.hash_bits_per_character有另一组值,可以在开始 session 之前计算吗?

我想计算不同服务器(本地、暂存或生产)上不同长度的 session ID,并通过分析默认 session 设置。

Starting the session and calculating session id is pretty much simpler. But i want to code the code something like:

// $length = {code to get length from hash_function and hash_bits_per_character}

// this is my custom function to generate new session id having length $length
$myCustomSessionId = generateCustomSessionId($length);

// assign my custom session id
session_id($myCustomSessionId);

//and finally start the session :)
session_start();

最佳答案

以下是 5.3 的所有 session 哈希算法。如果您想在自己的服务器上试用,请在底部使用我的代码

algo        bits   length
md2           4     32
md2           5     26
md2           6     22
md4           4     32
md4           5     26
md4           6     22
md5           4     32
md5           5     26
md5           6     22
sha1          4     40
sha1          5     32
sha1          6     27
sha224        4     56
sha224        5     45
sha224        6     38
sha256        4     64
sha256        5     52
sha256        6     43
sha384        4     96
sha384        5     77
sha384        6     64
sha512        4    128
sha512        5    103
sha512        6     86
ripemd128     4     32
ripemd128     5     26
ripemd128     6     22
ripemd160     4     40
ripemd160     5     32
ripemd160     6     27
ripemd256     4     64
ripemd256     5     52
ripemd256     6     43
ripemd320     4     80
ripemd320     5     64
ripemd320     6     54
whirlpool     4    128
whirlpool     5    103
whirlpool     6     86
tiger128,3    4     32
tiger128,3    5     26
tiger128,3    6     22
tiger160,3    4     40
tiger160,3    5     32
tiger160,3    6     27
tiger192,3    4     48
tiger192,3    5     39
tiger192,3    6     32
tiger128,4    4     32
tiger128,4    5     26
tiger128,4    6     22
tiger160,4    4     40
tiger160,4    5     32
tiger160,4    6     27
tiger192,4    4     48
tiger192,4    5     39
tiger192,4    6     32
snefru        4     64
snefru        5     52
snefru        6     43
snefru256     4     64
snefru256     5     52
snefru256     6     43
gost          4     64
gost          5     52
gost          6     43
adler32       4      8
adler32       5      7
adler32       6      6
crc32         4      8
crc32         5      7
crc32         6      6
crc32b        4      8
crc32b        5      7
crc32b        6      6
salsa10       4    128
salsa10       5    103
salsa10       6     86
salsa20       4    128
salsa20       5    103
salsa20       6     86
haval128,3    4     32
haval128,3    5     26
haval128,3    6     22
haval160,3    4     40
haval160,3    5     32
haval160,3    6     27
haval192,3    4     48
haval192,3    5     39
haval192,3    6     32
haval224,3    4     56
haval224,3    5     45
haval224,3    6     38
haval256,3    4     64
haval256,3    5     52
haval256,3    6     43
haval128,4    4     32
haval128,4    5     26
haval128,4    6     22
haval160,4    4     40
haval160,4    5     32
haval160,4    6     27
haval192,4    4     48
haval192,4    5     39
haval192,4    6     32
haval224,4    4     56
haval224,4    5     45
haval224,4    6     38
haval256,4    4     64
haval256,4    5     52
haval256,4    6     43
haval128,5    4     32
haval128,5    5     26
haval128,5    6     22
haval160,5    4     40
haval160,5    5     32
haval160,5    6     27
haval192,5    4     48
haval192,5    5     39
haval192,5    6     32
haval224,5    4     56
haval224,5    5     45
haval224,5    6     38
haval256,5    4     64
haval256,5    5     52
haval256,5    6     43

这是我用来生成它们的代码:

session_start();

$algos = hash_algos();

foreach ($algos as $key => $algo) {
    ini_set('session.hash_function', $algo);
    for ($i = 4; $i <= 6; $i++) {
        ini_set('session.hash_bits_per_character', $i);
        session_regenerate_id();
        echo $algo . ' - ' . $i . ' - ' . strlen(session_id()) . '<br>';
    }
}

关于PHP如何在开始 session 之前计算 session ID的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17002329/

相关文章:

php - 在 PHP、Window Dos 中启用 Debug模式

web-applications - 在不同服务器上的 Web 应用程序之间传递用户数据

java - 如何从多个服务器获取与 Spring Security 和 Spring Session 相同的 session

PHP session ID 相同但变量丢失

php - cakephp 中单选按钮的验证

php - 您对存储 AWS 身份验证数据有何建议?

python - 如何在Python Flask项目中启用Cloud Foundry的粘性 session ?

php - 如何从 SESSID 获取 $_SESSION 数据?

php - 运输车的双向 session

java - 如何通过分页从服务器获取更新的记录(就位置而言)