可以回应SESSION的大小吗?

Rah*_*hul 10 php session

我不知道我的会话是否太大了.有没有办法看到会话的大小.谢谢,拉胡尔

Cha*_*les 18

$size_of_session_estimate = strlen( serialize( $_SESSION ) );
Run Code Online (Sandbox Code Playgroud)

现在,这只是一个估计,因为序列化处理程序用于序列化会话,但它也不会太远.

话虽这么说,除非你在会话中存储了大量的数据,否则你可能不需要担心这一点.

  • 限制会话大小的因素有两个:单个脚本可用的内存量,以及用于在请求之间存储序列化会话的可用空间量(在Apache的情况下通常是磁盘上的临时文件 - 尽管*nix将可能会将它们缓存在空闲内存中).它将是前者(php内存限制)将首先耗尽 (3认同)
  • @Rahul - 每个字符都是一个*字节*. (2认同)

Mar*_*rth 8

如果您使用的是Apache,请查看您的APACHE_ROOT/tmp文件夹并查找名为的文件sess_***********.

否则从这里获取脚本并使用它来调用它array_size($_SESSION).这可能与确切的值略有不同(取决于PHP模块执行的压缩/优化).

  • paste-it.net离线,你有一个替代你的脚本链接? (2认同)

GZi*_*ipp 6

这个:

echo strlen(session_encode());
Run Code Online (Sandbox Code Playgroud)

将为您提供$ _SESSION使用的磁盘空间量(假设session.save_handler是默认值文件),因为session_encode()返回与存储在会话文件中的字符串相同的字符串.

它还可以更好地指示所使用的内存量,因为session_encode()添加的元数据少于serialize().

在默认的Apache设置中,您可以看到存储在磁盘上的会话数据:

session_write_close();
echo file_get_contents(sys_get_temp_dir() . 'sess_' . session_id());
Run Code Online (Sandbox Code Playgroud)