我最近需要验证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的配置会动态变更,另外定义的各种字母后期会发生变化,对应的场景基本不存在
<?PHP $a=0.5*100; if(is_int($a)){ echo'int'; } else{ echo'not int'; } ...
php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class studen...
当我想在一个进程中监听kill 和 kill -9命令报了这个错误。//监听kill pcntl_signal(SIGTERM, function () { posix_kill(0, SIGTERM); });...
当我们使用php爬虫采集网站时经常会遇到内容使用ajax异步加载。一般采取的方案是PHP模拟再请求api接口获取数据,但是有时候前端js加密非常麻烦,我们需要将js的加密方法转换为php方法方便curl请求。当然通过了解我们可以通过3种方案解决。第一种:使用phpv8js扩展执行js代码。(pecl...
//设置客户端断开依然运行 ignore_user_abort(true); //设置脚本不超时 set_time_limit(0); //死循环每隔1秒访问一次网址 while (true) { sleep(1); &nb...
(1).今天遇到一件奇怪的事情,在event事件中是无法自定义异常处理,例如我们使用set_exception_handler来统一处理异常。例如下面的代码:<?php error_reporting(E_ALL); set_error_handler(function ($errn...