Я хотел прочитать cookie и рассчитать его длину на стороне сервера, используя php, но не могу найти прямой метод для этого. Итак, как достичь этой задачи?
как насчет этого ?
setcookie("user", "Dino babu kannampuzha", time() + 3600); if (isset($_COOKIE["user"])) { $data = $_COOKIE["user"]; $serialized_data = serialize($data); $size = strlen($serialized_data); echo 'Length : ' . strlen($data); echo "<br/>"; echo 'Size : ' . ($size * 8 / 1024) . ' Kb'; }
// Вывод
Length : 21 Size : 0.232 Kb
Чтобы получить сырые файлы cookie и их длину:
$rawCookies = isset($_SERVER['HTTP_COOKIE']) ? $_SERVER['HTTP_COOKIE'] : null; $rawLength = strlen($rawCookies); echo $rawLength;
strlen($_COOKIE['cookie_name'])
?
Не уверен, что это то, что вы хотите, но вы можете попробовать это
$start_memory = memory_get_usage(); $cookie = $_COOKIE['YourCookie']; echo memory_get_usage() - $start_memory-PHP_INT_SIZE * 8; <?php setcookie("TestCookie", '10'); $start = memory_get_usage(); $cookie = $_COOKIE['TestCookie']; echo memory_get_usage() - $start; //116 bytes ?>
Обратитесь к этим ресурсам:
http://extraconversion.com/data-storage/characters/characters-to-bytes.html
Измерьте размер строки в байтах в php
https://mothereff.in/byte-counter
И мой снимок экрана, который получает размер файла cookie с помощью Firebug.
Я использую свой код из @Dino, но меняю что-то вроде strlen
на mb_strlen
для поддержки unicode.
Это становится:
$data = $_COOKIE['user']; $name = 'user'; if (!is_scalar($data)) { $data = serialize($data); } $size = mb_strlen($data)+mb_strlen($name); echo 'Cookie name length : ' . mb_strlen($name) . "<br>\n"; echo 'Cookie content length : ' . mb_strlen($data) . "<br>\n"; echo 'Cookie size : ~' . ($size) . ' Bytes<br>'."\n";
Которая почти близка к размеру, появляется в Firebug. Я действительно не понимаю, почему размер должен (n*8/1024)
если мы ссылаемся на ресурсы над ним всего на 1 символ 1 байт, за исключением юникода, поэтому мне нужно использовать mb_strlen
вместо strlen
.