2012-03-16 5 views
13

이유가 무엇이든 Silex-app에서 세션이 작동하지 않습니다. 내 php.ini에서 error_reporting을 E_ALL | E_STRICT으로 설정하고 오류가 표시되고 기록됩니다. 아무것도 볼 수 없어요. 하지만 어떤 이유로 세션이 생성되지 않고 /project-root/tmp/sessions/에 파일이 없습니다 (기본 session.save_path를 사용할 때도 마찬가지입니다). 파일 시스템에 대한 읽기/쓰기 권한 문제를 배제하기 위해 PdoSessionStorage로 전환해도 결과가 없습니다. 또한 $app['session'], $request->getSession()$app['request']->getSession() 사이에서 전환을 시도했지만 아무 소용이 없습니다.Silex App에서 세션이 작동하지 않습니다.

내가 문제를 찾을 수있는 위치 사람에 관해서는 딱하다 ... 여기

은 내가 쓴 아주 간단한 테스트 응용 프로그램 (use이 공간을 절약하기 위해 생략)입니다. 기본적 으로이 테스트는 내가 실제 애플 리케이션에서 달성하려고하는 것을 보여줍니다. 세션에 배열을 저장하려고합니다. $app->before()에서 값이 설정되어 있는지 확인한 다음 나뭇 가지에 전달하여 표시합니다 (예 : 로그인 정보 : You are logged in as {{ user.name }} :

<html> 
<head><title>test</title></head> 
<body> 
    {% if before is defined %}before: {{ before.key }}{% endif %} 
    {% if get is defined %}get: {{ get.key }}{% endif %} 
</body> 
</html> 

/아무것도에/테스트를 갈 때 전용 "얻을 : 테스트", 표시되지 않습니다 것 :

$app = new Application; 
$app['debug'] = true; 
$app->register(new SessionServiceProvider, array(
    'session.storage.save_path' => dirname(__DIR__) . '/tmp/sessions' 
)); 
$app->register(new TwigServiceProvider, array(
    'twig.path' => __DIR__ . '/views' 
)); 

$app->before(function (Request $request) use ($app) { 
// if ($app['debug'] == true) { 
//  $request->getSession()->set('test', array('key' => 'value')); 
// } 
    if ($request->hasPreviousSession() && $request->getSession()->has('test')) { 
     $test = $request->getSession()->get('test'); 
     if ($test !== null) { 
      $app['twig']->addGlobal('before', $test); 
     } 
    } 
}); 

$app->get('/', function() use ($app) { 
    return $app['twig']->render('sessiontest.twig'); 
}); 
$app->get('/test', function() use ($app) { 
    $app['session']->set('test', array('key' => 'value')); 
    return $app['twig']->render('sessiontest.twig', 
     array('get' => $app['session']->get('test'))); 
}); 
$app->run(); 

sessiontest.twig은 다음과 같습니다 표시됩니다 (하지만 이전에 트리거로 돌아가거나 새로 고치지 않는 것으로 실제로 저장 됨).

+2

상단에 '$ app-> before (function ($ request) {$ request-> getSession() -> start();});' – igorw

+0

@igorw를 추가하십시오. . 나무 용 나무를 보지 않았습니까? 저는 Zend Framework로 작업하는 장면에서 배후에서 시작되는 세션에 익숙합니다. 수동으로 시작하는 것에 대해서 생각조차하지 않았습니다. – dbrumann

+0

대답으로 다시 게시하겠습니다. – igorw

답변

26

는 지금 수동으로 세션을 시작해야합니다

$app->before(function ($request) { 
    $request->getSession()->start(); 
}); 

가 SILEX 추적기에서이 약 티켓이있다, 아직 그것에 대해 생각하는 시간이 없었어요. 문제는이 작업을 수행 할 때 모든 사용자에 대해 세션을 작성한다는 것입니다. 세션을 사용할 때마다 모든 사용자가 쿠키를 가져옵니다. 네가 원하지 않는 일 이니. 이 시점에서 자동으로 시작되지 않는 이유는 무엇입니까?

조금 더 명확 해지기를 바랍니다.

+0

내 시나리오에서는 각 사용자에 대해 세션을 사용할 수 있으므로 허용되지 않습니다. 답변과 설명 모두에 다시 한 번 감사드립니다. – dbrumann

+5

이것을 Silex 문서에 추가하십시오! 방금 Symfony Session 코드를 통해 한 시간 정도 시간을내어 이것을 알아 냈습니다. – yitznewton

+0

@igorw, silex는 여전히이 문제의 영향을 받습니까? – Federkun

관련 문제