voku / session2db
一个PHP库,充当PHP默认会话处理函数的包装器,将数据存储在MySQL数据库中,提供更好的性能、更高的安全性以及防止会话固定和会话劫持的保护。
Requires
- php: >=7.0.0
- voku/simple-mysqli: ~7.0 || ~8.0
Requires (Dev)
- phpunit/phpunit: ~6.0 || ~7.0
This package is auto-updated.
Last update: 2024-09-04 04:18:28 UTC
README
👑 Session2DB
PHP默认会话处理程序的即时替代品,将会话数据存储在数据库中,提供更好的性能、更高的安全性以及防止会话固定和会话劫持的保护。
Session2DB实现了会话锁定,确保在多个并发AJAX请求的场合中数据得到正确处理。
它也是适用于扩展到多个Web服务器(使用负载均衡器或循环DNS)的应用程序的解决方案,其中用户的会话数据需要可用。将会话存储在数据库中使它们可供所有服务器使用!
该库支持"flashdata" - 会话变量,它只会在下一个服务器请求中可用,之后会自动删除。通常用于信息或状态消息(例如:“数据已成功更新”)。
Session2DB灵感来源于John Herren的Trick out your session handler文章和Chris Shiflett关于PHP会话的文章,并基于Zebra_Session。
代码注释详细,当PHP的错误报告级别设置为E_ALL时,不会生成警告/错误/通知。
要求
PHP 7.x,已激活mysqli扩展,MySQL 5.x+(推荐:mysqlnd扩展)
如何安装
composer require voku/session2db
如何使用
安装后,您需要从该存储库的install目录初始化数据库表,它将包含一个名为session_data.sql的文件。此文件包含用于由类存储会话数据的SQL代码。使用您首选的MySQL管理器(如phpMyAdmin或出色的Adminer)导入或执行SQL代码,并将其导入您选择的数据库。
*注意,此类假定已有一个到MySQL数据库的活跃连接,并且它不会尝试创建一个!
// // simple (dirty) example // <?php use voku\db\DB; use voku\helper\Session2DB; DB::getInstance('hostname', 'username', 'password', 'database'); new Session2DB(); // from now on, use sessions as you would normally // this is why it is called a "drop-in replacement" :) $_SESSION['foo'] = 'bar';
// // extended example // <?php use voku\db\DB; use voku\helper\DbWrapper4Session; use voku\helper\Session2DB; // include autoloader require_once 'composer/autoload.php'; // initialize the database connection e.g. via "voku\db\DB"-class $db = DB::getInstance( 'hostname', // e.g. localhost 'username', // e.g. user_1 'password', // e.g. ****** 'database', // e.g. db_1 'port', // e.g. 3306 'charset', // e.g. utf8mb4 true, // e.g. true|false (exit_on_error) true, // e.g. true|false (echo_on_error) '', // e.g. 'framework\Logger' (logger_class_name) '' // e.g. 'DEBUG' (logger_level) ); // you can also use you own database implementation via the "Db4Session"-interface, // take a look at the "DbWrapper4Session"-class for a example $db_wrapper = new DbWrapper4Session($db); // initialize "Session to DB" new Session2DB( 'add_your_own_security_code_here', // security_code 0, // session_lifetime false, // lock_to_user_agent false, // lock_to_ip 1, // gc_probability 1000, // gc_divisor 'session_data', // table_name 60, // lock_timeout $db_wrapper, // db (must implement the "Db4Session"-interface) true // start_session (start the session-handling automatically, otherwise you need to use session2db->start() afterwards) ); // from now on, use sessions as you would normally // this is why it is called a "drop-in replacement" :) $_SESSION['foo'] = 'bar'; // data is in the database!
支持
请访问 Github | 问题 | PayPal | Patreon 以获取支持和捐款。
请访问 Releases | Twitter | Patreon 以获取状态更新和发布公告。
如需专业支持,请联系 me。