0

Symfony 2.1 内のサイト (1 つのコントローラー内) のセッションに問題があります。セッションを次のように設定しました。

 $this->get("session")
 ->set('UserMongoId', $this->get('security.context')->getToken()->getUser()->getId());

その後、symfony 2.1 以外の別のファイル (Symfony の web フォルダー内) で、次のようにします。

use Symfony\Component\HttpFoundation\Request;


$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';

$kernel = new AppKernel('rpod', true);
$kernel->loadClassCache();
$request = Request::createFromGlobals();

$session = new \Symfony\Component\HttpFoundation\Session\Session();
$session->start();
var_dump ($session);

$user_id = $session->get("UserMongoId");

しかし、私はnullを受け取りました.それを機能させる方法がわかりません.何かアイデアはありますか?

今、私はMongoDbSessionHandlerを試して、セッションをmongoでdbに保存しています

4

3 に答える 3

2

交換してみる

$session = new \Symfony\Component\HttpFoundation\Session\Session();
$session->start();

$session = $request->getSession();

新しいものではなく、Request::createFromGlobals(); で作成したセッション オブジェクトを取得する必要があるためです。

于 2013-01-03T23:18:35.503 に答える
-1

mongoを使用してセッションをdbに保存します:

1.- service.yml

parameters:
    mongo.session.options:
        database: quorra_session
        collection: session
services:
    mongo.connection:
        class: MongoDoctrine\MongoDB\Connection
        factory_service: doctrine.odm.mongodb.document_manager
        factory_method: getConnection
        calls:
           - [initialize, []]
    mongo:
        class: Mongo
        factory_service: mongo.connection
        factory_method: getMongo

    session.handler.mongo:
          class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler
          arguments: [@mongo, %mongo.session.options%]

2.- confing.yml 追加:

  framework:
        session:
            handler_id: session.handler.mongo

3.-その後、MongoDbSessionHandlerを使用したdoctrinemongo dbは、異なるサーバーで作業する場合、すべてのセッションをdb perfectに自動的に保存します。そのようなものになります:

{ "_id" : ObjectId("50e60da9893ad520a11a7fd7"), "sess_data" : BinData(2,"pAMAAF9zZjJfYXR0cmlidXRlc3xhOjM6e3M6MTI6ImFjY2Vzc190b2tlbiI7czo1MDoiMTYzNDQzODUtYW52OVF6WmFQVDF0bHJ1ejk5OWdlU0w4U2Q1THdMQUxUSnA2V1lFaE0iO3M6MTk6ImFjY2Vzc190b2tlbl9zZWNyZXQiO3M6NDI6IlB4MDg1SWFEWktaUFBucHQ0UkRNbDRtV29VdGtQeFc0YkF4dmZzdkI2NCI7czoxNDoiX3NlY3VyaXR5X21haW4iO3M6NjMxOiJDOjY0OiJGT1NcVHdpdHRlckJ1bmRsZVxTZWN1cml0eVxBdXRoZW50aWNhdGlvblxUb2tlblxUd2l0dGVyVXNlclRva2VuIjo1NTM6e2E6Mjp7aTowO047aToxO3M6NTI4OiJhOjQ6e2k6MDtDOjMxOiJRdW9ycmFcQ29yZUJ1bmRsZVxEb2N1bWVudFxVc2VyIjoxODU6e2E6Mjp7aTowO047aToxO3M6MTYwOiJhOjk6e2k6MDtzOjA6IiI7aToxO3M6MzE6ImpkZWRyYnY4bmxzMDRvYzh3d2M0c29zb2MwazhzZzAiO2k6MjtzOjY6ImZhbmp1bCI7aTozO3M6NjoiZmFuanVsIjtpOjQ7YjowO2k6NTtiOjA7aTo2O047aTo3O2I6MTtpOjg7czoyNDoiNTBlNjBkYTlkNGMzOGVlOWMyMDAwMDAwIjt9Ijt9fWk6MTtiOjE7aToyO2E6Mjp7aTowO086NDE6IlN5bWZvbnlcQ29tcG9uZW50XFNlY3VyaXR5XENvcmVcUm9sZVxSb2xlIjoxOntzOjQ3OiIAU3ltZm9ueVxDb21wb25lbnRcU2VjdXJpdHlcQ29yZVxSb2xlXFJvbGUAcm9sZSI7czoxMjoiUk9MRV9UV0lUVEVSIjt9aToxO086NDE6IlN5bWZvbnlcQ29tcG9uZW50XFNlY3VyaXR5XENvcmVcUm9sZVxSb2xlIjoxOntzOjQ3OiIAU3ltZm9ueVxDb21wb25lbnRcU2VjdXJpdHlcQ29yZVxSb2xlXFJvbGUAcm9sZSI7czo5OiJST0xFX1VTRVIiO319aTozO2E6MDp7fX0iO319Ijt9X3NmMl9mbGFzaGVzfGE6MDp7fV9zZjJfbWV0YXxhOjM6e3M6MToidSI7aToxMzU3MjU0MTU0O3M6MToiYyI7aToxMzU3MjUzOTgzO3M6MToibCI7czoxOiIwIjt9"), "sess_id" : "f9a98866cd99a33d61204413b68d6ca5", "sess_time" : { "t" : 1357254155000, "i" : 3 } }

4.- symfony 2.1 以外の 1 つのファイル (コンポーネントをロードしないように、現在 Web にファイルがあります)

use Symfony\Component\ClassLoader\ApcClassLoader;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler;

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';

//$kernel = new AppKernel('prod', false);
$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();

$mongo = new Mongo();

$options["database"] = "quorra_session";
$options["collection"] = "session";

$mongoSession = new MongoDbSessionHandler($mongo,$options);
$data = $mongoSession->read($_COOKIE["PHPSESSID"]);

変数データには、このユーザーのすべてのセッションが含まれています。

5.- 次のステップは、この最後のファイルに access_token_secret を送信し、$data = $mongoSession->read($_COOKIE["PHPSESSID"]); の結果で確認することです。

私のために働きます、私はあなたのコメントを待っています

于 2013-01-03T23:40:04.167 に答える