2017-01-19 4 views
2

익명 사용자를위한 임시 데이터를 저장하는 방법이 필요합니다.

은 분명히이 불가능합니다 :

\Drupal::service('user.private_tempstore') 

당신이 나에게 억지 조금 보인다 세션 관리 및 물건에 대한 사용자 정의 생성자를 작성하지 않으면?

나는

\Drupal::service('user.shared_tempstore') 

를 사용하여 시도하지만 그 모든 익명 사용자의 임시 데이터를 저장합니다. 따라서 단일 사용자와 연결되어 있지 않습니다.

원시 $ _SESSION [ 'data']을 (를) 사용하면 문제가 없지만 Drupal에서이 작업을 수행해야하고 안전하지 않은지 여부를 잘 모르겠습니다.

답변

0

. 그들에 대한 약간의 연구는 사용하기에 완벽하게 안전해야합니다. 그들은 어디에서나 제대로 작동하며 제대로 사용하고 있습니다.

익명 사용자를 위해 작동하지 않습니다

3

나는이 성공적으로 사용했기 때문에 ($_SESSION에 대한) 특정 질문에 대답하지 오전 : 절차 적 코드 내에서

$session = \Drupal::service('user.private_tempstore')->get('your_module'); 
$session->set('whatever', $whatever); 

(즉 후크, 테마) 문제없이. 당신이 개인 tempostore 당신을 얻을 후이 라인

$session = \Drupal::service('user.private_tempstore')->get('your_module') 

의 목적이다이 개인 tempstore (이 말의 더 나은 방법의 부족) 모듈에 할당되어야한다는

에주의 지금 설정하고 세션 값을 얻을 수 있습니다 :

죄송합니다

$session->get('whatever'); 
$session->set('whatever', $whatever); 

편집 올바르게 설명했다. 중요한 부분을 100 %받지 못했습니다.)

요청에서 언제든지 Session 개체에 액세스 할 수 있습니다.

$session = \Drupal::request()->getSession(); 
$session->set('whatever', 'hello'); 
$value = $session->get('whatever', 'default'); 
+1

드루팔 8에 그들을 사용하는 문제가 있다고 생각하지 마십시오, 아마 내 초기 문제 즉 더 분명했습니다해야합니다. –

+0

@ PascalClaes 당신이 올바르게 설명했습니다. 나는 중요한 부분을 얻지 못했다. 나는 대답을 편집했다. –

+0

고유 한 각 익명 방문자에 대해 고유 세션을 만들까요? –

2

세션 (Drupal 8)은 SessionInterface 인터페이스의 간단한 Session 구현을 통해 사용됩니다. See Complete Tutorial of Sessions (Drupal 8).

예 : 지금 잠시 동안 일반 PHP의 $의 _SESSION 변수를 사용하고

use Symfony\Component\HttpFoundation\Session\Session; 

$session = new Session(); 
$session->start(); 

// set and get session attributes 
$session->set('name', 'Yash'); 
$session->get('name'); 

// set flash messages 
$session->getFlashBag()->add('notice', 'Profile updated'); 

// retrieve messages 
foreach ($session->getFlashBag()->get('notice', array()) as $message) { 
    echo '<div class="flash-notice">'.$message.'</div>'; 
} 
+0

답변을 수락하기 전에 테스트해야하지만 매우 유용합니다! –

+0

그래 보이지만, 더 많은 테스트가 필요합니다. 이것과 같은 에러를 생성한다; RuntimeException : 세션 시작 실패 : 이미 PHP에서 시작되었습니다. Symfony \ Component \ HttpFoundation \ Session \ Storage \ NativeSessionStorage-> start() (/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php의 131 줄)에 있습니다. – user25794

관련 문제