我正在开发一个由 2 个应用程序(前端和后端)组成的 symfony 项目,我被要求在后端手动创建第二个会话,以便管理员无需登录即可从后端访问用户数据(前端) . 我在 factory.yml 中设置了不同的名称,以便每个应用程序都有自己的 cookie。Basicalyy,我需要从后端检索用户,手动创建前端cookie而不破坏后端会话,然后重定向到前端。我已经尝试了以下代码,但这不起作用:
$user = $this->getUser()->getAttribute('some_attribute');
$session = new sfSessionStorage();
$option = array(
'session_name' => 'frontend_session_name'
);
$session->initialize($options);
// some code to push the user in the new cookie
$this->redirect('https://frontend.php');
我很久没有使用 symfony 并且必须承认我在这里有点迷失了。我知道我需要用用户数据填充新的 cookie,但我不知道怎么做。任何帮助将不胜感激。
编辑:我忘了提到我正在使用推进器。编辑#2:我想出了以下解决方案,它可以达到预期目的:
$user = $this->getUser()->getAttribute('some_attribute'); //retrieving the user whose data I'd like to access
$currentSessionId = session_id();
session_write_close();
session_name('frontend_session_name');
session_start();
session_regenerate_id();
$_SESSION['symfony/user/sfUser/culture'] = 'en';
$_SESSION['symfony/user/sfUser/lastRequest'] = time();
$_SESSION['symfony/user/sfUser/authenticated'] = 1;
$_SESSION['symfony/user/sfUser/credentials'] = array('frontend_user');
$_SESSION['symfony/user/sfUser/attributes'] = array(
'symfony/user/sfUser/attributes' => array(
'user' => $user
)
);
session_write_close();
session_name('backend_session_name');
session_id($currentSessionId);
session_start();
$this->redirect('/frontend.php');
所以我只是手动重新创建了会话并推送了必要的数据。感谢那些试图提供帮助的人。