我正在处理一个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');
所以我只是手动重新创建了会话,并输入了必要的数据。
感谢那些想帮忙的人。
最佳答案
由于共享会话似乎不是您的选择,我建议:
为每个用户创建一个唯一的密钥,而不是id,而是一个难以猜测的单独字符串
在前端创建一个模块/操作,接受密钥作为参数,在数据库中找到相应的用户,并将其登录
然后,您可以在后端生成所需的链接,管理员可以单击并重定向到这些链接。
不是很安全,确保你的钥匙是长的。您需要添加代码以防止暴力强制,并可能通过IP地址限制对操作的访问?
您还可以要求管理员用户的密钥,并检查它是否有效,这将使您更难猜测。
关于php - 如何在Symfony 1.4中手动创建新 session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17024688/