我最近需要验证PHP会话ID创建的值。经过一些研究,我意识到有两个与此值相关的有趣的php.ini配置设置:
session.sid_length是ID中的字符数 session.sid_bits_per_character控制使用的字符集。从手册上可以知道可能的值为 '4'(0-9,af),'5'(0-9,av)和'6'(0-9,az,AZ,“-”,“,”)
因此,要验证会话ID,我们需要创建一个正则表达式,以查找预期长度的正确字符集。
function isValidSessionId(string $sessionId): bool
{
$sidLength = ini_get('session.sid_length');
switch (ini_get('session.sid_bits_per_character'))
{
case 6:
$characterClass = '0-9a-zA-z,-';
break;
case 5:
$characterClass = '0-9a-v';
break;
case 4:
$characterClass = '0-9a-f';
break;
default:
throw new \RuntimeException('Unknown value in session.sid_bits_per_character.');
}
$pattern = '/^[' . $characterClass . ']{' . $sidLength . '}$/';
return preg_match($pattern, $sessionId) === 1;
}本篇文章学习自akrabat.com博客,不建议使用本方法验证,因为ini的配置会动态变更,另外定义的各种字母后期会发生变化,对应的场景基本不存在
1.解压后,上传整个文件夹至服务器根目录2.在网站的一个公用文件(如数据库的连接文件)中加入代码:if(is_file($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php')){ &n...
开启错误提示代码:ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT);关闭错误提示代码:error_reporting(E_ALL ^&n...
逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event { /** &nbs...
<?php //php7+ define('CONFIG', [ 'MYSQL' => '127.0.0.1',  ...
posix_ttyname - 获取当前终端设备名称。<?php var_dump( posix_ttyname(STDOUT) );我们启动一个终端,执行上面的代码输出:/dev/tty1我们再启动一个终端,执行上面的代码输...
断点下载的原理:http请求头添加Range参数告诉文件服务器端需要的字节范围例如1个文本文件的字节为1000,第一次请求Range: bytes=0-500第二次请求Range: bytes=501-1000通过每次的请求将返回的流追加写入到文件。注意的项目:断点下载服务器端的每次只返回字节传输的...