下载地址:https://downloads.joomla.org/it/cms/joomla3/3-4-6
本文测试环境为 PHP 5.5.9+apache+Ubuntu14.04.5 LTS+Joomla3.4.6 。
在 index.php 第42行下好断点,程序流程如下,这里我们重点关注 loadSession 方法。
在 loadSession 方法中会去实例化 JSessionStorageDatabase 类(下图第737行),而该类继承自 JSessionStorage 类,在实例化时会调用父类的 __construct 方法。在父类 __construct 方法中,我们看到使用了 session_set_save_handler 函数来处理 session ,函数中的 $this 指的就是 JSessionStorageDatabase 类对象(下图第88行)。接着,程序开启了 session_start 函数。
在经过 session_set_save_handler 函数处理后,如果调用 session_start 函数,就会依次调用 open、read、write、close 等方法,可以通过如下代码验证该结论。
<?php
class SessionDemo
{
public function open()
{
echo 'open'.'<br>';
}
public function close()
{
echo 'close'.'<br>';
}
public function read()
{
echo 'read'.'<br>';
}
public function write()
{
echo 'write'.'<br>';
}
public function destroy()
{
echo 'destroy'.'<br>';
}
public function gc()
{
echo 'gc'.'<br>';
}
}
$session = new SessionDemo();
session_set_save_handler(
array($session, 'open'), array($session, 'close'), array($session, 'read'), array($session, 'write'),
array($session, 'destroy'), array($session, 'gc')
);
点击收藏 | 0
关注 | 1