我正在开发一个由2个应用程序(前端和后端)组成的symfony项目,并且我被要求在后端手动创建第二个会话,以便管理员可以从后端访问用户数据(前端)没有登录的后端。 我在factory.yml中设置了不同的名称,以便每个应用程序都有自己的cookie。 基本上,我需要从后端检索用户,手动创建前端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');
所以我只是手动重新创建会话并推送必要的数据。 感谢那些试图提供帮助的人。
答案 0 :(得分:0)
由于分享会话似乎不适合您,我建议:
然后,您可以在后端生成管理员可以单击并重定向到的所需链接。
不太安全,请确保您的钥匙很长。您需要添加代码以防止暴力破解,并且可以通过IP地址限制对操作的访问吗?
您还可以要求管理员用户的密钥,并检查它是否也有效,这会使其更难猜测。