我调试和搜索了很长一段时间,但我无法弄清楚发生了什么。这是我第一次做 a custom session handler
,所以我担心我忽略了一些非常明显的东西。我想实现一个自定义会话处理程序,以便我可以在会话中存储其他信息,并能够暂时禁用某些用户组对站点受保护区域的访问。
我的登录页面(在基本的基于文件的 php 会话中运行良好)包括一个 php 文件,其中包含许多功能,包括会话处理程序函数和我的错误处理程序。该包含的文件包括执行数据库连接的第三个文件。使用建立连接mysqli_connect()
并将生成的链接存储在变量中$dbc
。整个站点都使用相同的连接来记录错误、加载/编辑站点内容等。我决定使用相同的数据库连接,因为它已经在每个页面上使用,并且我的会话处理程序几乎需要在每个页面上使用也是。在我的代码中,我没有手动关闭数据库连接,但我认为它可能会以某种方式自动关闭。
我的函数使用全局语句访问数据库连接 ($dbc)。前任:
function sess_write($id, $data)
{
global $dbc;
...
我open
的read
, 和write
函数应该以这种方式使用变量。我在打开和读取函数中检查了数据库连接变量,它如预期的那样非空,但在我的写入函数中它突然显示为空。PHP 是否在读写之间做一些可能会关闭该连接的事情?我在创建数据库连接的同一个包含文件中创建了一个测试变量,并global $test;
在 write 函数中使用了相同的语句,并且该变量看起来很好,所以我猜它与关闭数据库有关。我尝试使用第二个变量来存储数据库连接(仅供会话处理程序使用),但这也不起作用。有任何想法吗?我只是像往常一样愚蠢吗?