PHP正在生成多个会话

PHP正在生成多个会话,php,session,Php,Session,我不确定是什么原因造成的,但我已经尽了一切努力来解决一个非常烦人的问题,这个问题现在一直困扰着我的网站,那就是PHP为每个用户生成多个会话 目前,我是唯一使用该站点的人,因此我完全清楚其他人不可能创建会话,但是,可以肯定的是,我在启动会话后立即将IP地址存储在会话类中。。瞧,我的IP地址是不断生成的。登录后,数据库中又添加了5到6条记录,每条记录都包含我的IP地址,其中只有一条记录包含会话信息 现在,网站运行良好,但我知道这不是正常行为。我只调用了session_start()一次,除了登录之外

我不确定是什么原因造成的,但我已经尽了一切努力来解决一个非常烦人的问题,这个问题现在一直困扰着我的网站,那就是PHP为每个用户生成多个会话

目前,我是唯一使用该站点的人,因此我完全清楚其他人不可能创建会话,但是,可以肯定的是,我在启动会话后立即将IP地址存储在会话类中。。瞧,我的IP地址是不断生成的。登录后,数据库中又添加了5到6条记录,每条记录都包含我的IP地址,其中只有一条记录包含会话信息

现在,网站运行良好,但我知道这不是正常行为。我只调用了session_start()一次,除了登录之外,我没有在站点的任何地方调用REGENATE_id,但是即使在登录之前,只要我访问站点,就会添加三条记录

我想知道这是否是一个已知的问题,并且是否有人可以梳理我的代码,看看他们是否能看到可能导致这种奇怪行为的任何东西,因为不幸的是,谷歌和搜索so的一个小时左右没有出现太多结果(除了保存问题的未回答问题)

课堂会话{
私人$life\u time$数据库;
公共函数构造()
{
$this->life\u time=DatabaseConfig::read('SESSION\u MAX\u life');//在配置文件中设置,返回1440
$this->database=DatabaseCore::getInstance();//基本上只允许创建一个数据库实例,以避免多个持久连接带来的开销。
会话设置保存处理程序(
数组(&$this,“NewSession”),
数组(&$this,“CloseSession”),
数组(&$this,“ReadSession”),
数组(&$this,“WriteSession”),
数组(&$this,“DestroySession”),
数组(&$this,“CleanSessions”)
);
会议名称(“会议极客小组”);
会话_start();
}
公共函数NewSession($save_path,$session_name){
$sess\u save\u path=$save\u path;
返回true;
}
公共函数ReadSession($id){
$sth=$this->database->dbh->prepare(“从'sessions'中选择'session'u data',其中'session'u id`=:session'u id”);
$sth->execute(数组)(
':session_id'=>$id
));
如果($sth->rowCount()>0)
{
$row=$sth->fetch();
$data=$row['session_data'];
}
返回$data;
}
公共函数写会话($id,$data){
$sth=$this->database->dbh->prepare(“替换`sessions`(`session\u id`、`session\u data`、`expires`)值(:id、:data、:expires)”);
$sth->execute(数组)(
':id'=>$id,
':data'=>$data,
“:过期”=>time()+$this->life\u time
));
返回true;
}
公共功能会话($id){
$params=会话获取cookie参数();
setcookie(会话名称(),'',时间()-42000,
$params[“路径”],$params[“域”],
$params[“安全”],$params[“httponly”]
);
$sth=$this->database->dbh->prepare(“从`sessions`删除,其中`session\u id`=:id”);
$sth->execute(数组)(
':id'=>$id
));
返回true;
}
公共功能清理(){
$sth=$this->database->dbh->prepare(“从`sessions`中删除,其中`expires`<:time”);
$sth->execute(数组)(
':time'=>time()
));
返回true;
}
公共功能关闭会话(){
返回true;
}
}
DatabaseConfig::write('SESSION\u MAX\u LIFE',MAX\u SESSION\u LIFE);

最后,非常感谢所有的帮助。。这可能是主机或PHP INI文件的错误吗?谢谢:)

您在PHP INI中检查session.auto\u start了吗

class Sessions {

private $life_time, $database;

public function __construct()
{
    $this->life_time = DatabaseConfig::read('SESSION_MAX_LIFETIME'); // Set within a config file, returns 1440
    $this->database = DatabaseCore::getInstance(); // Basically allows me to create only one instance of the database to avoid overhead from multiple persistent connections.

    session_set_save_handler( 
        array( &$this, "NewSession" ), 
        array( &$this, "CloseSession" ),
        array( &$this, "ReadSession" ),
        array( &$this, "WriteSession"),
        array( &$this, "DestroySession"),
        array( &$this, "CleanSessions" )
    );

    session_name("SESSION_GEEK_PANEL"); 
    session_start();
}

public function NewSession( $save_path, $session_name ) {

    $sess_save_path = $save_path;

    return true;

}

public function ReadSession( $id ) {

    $sth = $this->database->dbh->prepare("SELECT `session_data` FROM `sessions` WHERE `session_id` = :session_id ");
    $sth->execute(array(
        ':session_id'    => $id
    ));

    if( $sth->rowCount() > 0 )
    {
        $row = $sth->fetch();
        $data = $row['session_data'];
    }

    return $data;

}

public function WriteSession( $id, $data ) {

    $sth = $this->database->dbh->prepare("REPLACE `sessions` (`session_id`, `session_data`, `expires`) VALUES( :id, :data, :expires )");

    $sth->execute(array(
        ':id'    => $id,
        ':data' => $data,
        ':expires' => time() + $this->life_time
    ));

    return true;

}

public function DestroySession( $id ) {

    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );

    $sth = $this->database->dbh->prepare("DELETE FROM `sessions` WHERE `session_id` = :id");
    $sth->execute(array(
        ':id' => $id
    ));

    return true;

}

public function CleanSessions() {

    $sth = $this->database->dbh->prepare("DELETE FROM `sessions` WHERE `expires` < :time");
    $sth->execute(array(
        ':time' => time()
    ));

    return true;

}

public function CloseSession() {

    return true;

}
}
DatabaseConfig::write('SESSION_MAX_LIFETIME', MAX_SESSION_LIFE);