无法设置用户而不破坏存在的会话

问题描述

我实现了一个自定义的身份验证类,该类返回一个简单的用户实体。当尝试传递Auth组件的返回用户实体时,问题就开始了。它仅在调用它的位置直接可用(在此示例中,在登录页面上(但是,如果刷新登录页面,则必须再次使用自定义auth类使用户重新认识)): 我的登录功能如下:

public function login(){
   
   
    $session = $this->getRequest()->getSession();
    
    if(!$this->Auth->user()){
       $user = $this->Auth->identify();
       
            $logout_url = $session->read('logout_url');
        
        $sampl_session = $session->read('SimpleSAMLPHP_SESSION');
      

  
  
        $session->destroy();//this is the critical point in my code,without this i can not use the setUser function because i got Session already started message

        $session->start();
        
        $session->write('SimpleSAMLPHP_SESSION',$sampl_session);
        $session->write('logout_url',$logout_url);
        
        $this->Auth->setUser($user);
        
        $this->set(compact('logout_url'));

    return $this->redirect(['controller'=>'Users','action'=>'profile']);
        
    }else{
        $logout_url = $session->read('logout_url');
        $this->set(compact('logout_url'));
        
        return $this->redirect(['controller'=>'Users','action'=>'profile']);
    }
}

我厌倦了在config / app.PHP文件修改会话设置:

enter code he    'Session' => [
    'defaults' => 'PHP',//'cookie'=>'diploma','ini' => [
      //  'session.cookie_path' => '',//  'session.save_path'=>'/tmp/session',//'session.cookie_domain' => '.diploma.uni-obuda.hu'
    ],'timeout'=>500
]

没有任何运气。因此,会话只有在创建时才可用。 我还检查了会话目录,我可以看到每次登录页面加载时都会创建新的会话(变量?)。我知道关键点是当我销毁会话并重新创建会话时,如果没有此操作,我将无法设置用户(它不会附加到当前会话中,而是会创建一个新会话)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)