如何使用symfony2正确地重新打开会话?

Jam*_*all 0 flash session symfony

我在我的symfony2应用程序中使用了一个flash组件,它上传了多个图像,当它们到达服务器时,我想重新打开会话,这样我就可以将图像存储在相对于登录用户的位置.我发送每个文件上传的PHP会话ID ...

在香草PHP我可以实现这一点......

session_id($originalSessionId);
session_start();
Run Code Online (Sandbox Code Playgroud)

但是有一种symfony2方法使用安全上下文吗?

编辑:这是一个类似的问题,虽然我想通过传递令牌并使用单独的防火墙保护上传URL来创建某种基于令牌的登录.

Vin*_*ncz 6

首先,您需要创建自己的会话存储类,如下所示:

<?php
namespace Elao\BackBundle\Session;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage;

class Storage extends NativeSessionStorage
{
    public function __construct(array $options = array(), ContainerInterface $container)
    {
        $request = $container->get('request');
        if ($request->query->has('sessionId')) {
            $request->cookies->set(session_name(), 1);    // We have to simulate this cookie, in order to bypass the "hasPreviousSession" security check
            session_id($request->query->get('sessionId'));
        }
        return parent::__construct($options);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您必须重新定义默认值(例如,在config.yml中):

parameters:
    session.storage.native.class: ElaoBackBundleSessionStorage
services:
    session.storage.native:
        class:     %session.storage.native.class%
        arguments: [%session.storage.options%, @service_container]
Run Code Online (Sandbox Code Playgroud)