如何在symfony 1.4中手动创建新会话

时间:2013-06-10 13:09:47

标签: php symfony-1.4

我正在开发一个由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');

所以我只是手动重新创建会话并推送必要的数据。 感谢那些试图提供帮助的人。

1 个答案:

答案 0 :(得分:0)

由于分享会话似乎不适合您,我建议:

  • 为每个用户创建一个唯一的密钥,而不是id,但是一个难以猜测的单独字符串
  • 在前端创建一个模块/操作,接受密钥作为参数,在数据库中查找相应的用户,并将其记录在

然后,您可以在后端生成管理员可以单击并重定向到的所需链接。

不太安全,请确保您的钥匙很长。您需要添加代码以防止暴力破解,并且可以通过IP地址限制对操作的访问吗?

您还可以要求管理员用户的密钥,并检查它是否也有效,这会使其更难猜测。