2012-01-24 5 views
29

Czy ktoś próbuje zf2? Nie mogę zrozumieć nowego mechanizmu korzystania z sesji w Zf2. Jak mogę pisać i czytać do/z sesji w nowej strukturze Zend?Jak korzystać z Zend Session w zf2?

Również nie mogę znaleźć żadnych przykładów w Internecie.

+1

Czy ta odpowiedź naprawdę pomóc? Co znalazłeś? –

+1

Znalazłem przykład w Zend \ Authentication \ Storage \ Session.php. Na przykład możesz napisać do sesji takiej jak ta '$ session-> offsetSet ('email', $ email);', sprawdź, czy plik istnieje tak jak '$ session-> offsetExists ('email')' i pobierz pole z tym kodem wykonanie: '$ session-> offsetGet ('email')'. Tak, to jest to, co szukałem. – rdo

+4

Sesję można również uruchomić za pomocą '$ session = new Container ('base');' gdzie kontener to 'Zend \ Session \ Container' – rdo

Odpowiedz

68

Niektóre przykłady ZF2 sesje użytkowania: utworzenie

Sesja:

use Zend\Session\Container; 
$session = new Container('base'); 

Sprawdź, czy klucz istnieje w sesji:

$session->offsetExists('email') 

Uzyskiwanie wartości z sesji przez klucz:

$email = $session->offsetGet('email'); 

Nastawa w sesji:

$session->offsetSet('email', $email); 

wartości wyłączające w sesji:

$session->offsetUnset('email'); 

i innych łatwy sposób wykorzystać sesji to:

$session = new Container('foo'); 

// to są odpowiednik ll oznacza w tym samym celu

$session['bar'] = 'foobar'; 

$session->bar = 'foobar'; 

$session->offsetSet('bar', 'foobar'); 
+10

Och, proszę, nie używaj metod ** ArrayAccess ** bezpośrednio. To jest moveton. 'Zend \ Session \ Container' również implementuje niestandardowe ** ArrayObject **, co oznacza, że ​​możesz ustawiać, pobierać i sprawdzać właściwości, tak jak robisz to z obiektem. Zobacz moją odpowiedź powyżej – dVaffection

+0

W przypadku powiadomienia lub ostrzeżenia możesz użyć tego w ten sposób: $ sesja-> offsetSet ('admin', new \ stdClass()); Następnie: $ session-> admin-> username = 'John'; –

3

Aktualnie pracuję z zf2. Znalazłem wykorzystanie sesje:

Zend\Authentication\Storage\Session.php

Może znajdziesz tam odpowiedź.

-1

Aby rozpocząć sesję trzeba użyć

zend\session\container 
17

Zdecydowanie tak, należy użyć Zend \ Session \ Container

Pojemnik rozciąga się od ArrayObject i wystąpienie z ARRAY_AS_PROPS flagi, które oznacza, że ​​można łatwo iterację właściwości i czytać/napisz je, np

use Zend\Session\Container as SessionContainer; 

$this->session = new SessionContainer('post_supply'); 
$this->session->ex = true; 
var_dump($this->session->ex); 

Pierwszy argument jest nazw sesji i drugi - Menedżer. Manager jest fasadą dla Storage i SaveHandler i jest skonfigurowany z ConfigInterface w celu zapisania danych sesji w DB lub serwerze Memcache.

+1

Używanie podkreśleń w polach lub metodach chronionych nie jest już modne;). Głównie dlatego, że nowoczesne IDE sprawiają, że praktyka jest przestarzała, a podkreślenie sprawia, że ​​rzeczy wyglądają brzydko. – markus

+0

2 markus-tharkun Tak, wiem i już go nie używam;) – dVaffection

+0

Jestem początkującym zendem. Chcę wiedzieć, jak używać SessionContainer w Zf2. Moim zdaniem, jedna aplikacja internetowa powinna mieć tylko jedną sesję sessionContainer, prawda? więc jak zdobyć sessionContainer w kontrolerze i wyświetlić? – inza9hi

1

Jeśli próbujesz użyć sesji w akcji logowania, możesz użyć: "Zend\Authentication\AuthenticationService". Uwierzytelnia także sesję użytkownika i przechowywania.

getStorage()->write($contents) zapisze sesję.

0

Oto krótki przykład. zaimplementowałem w odniesieniu do utrzymywania sesji po pomyślnym uwierzytelnieniu użytkownika.

<?php 
$registry = Zend_Registry::getInstance(); 
$DB = $registry['DB']; 
$authAdapter = new Zend_Auth_Adapter_DbTable($DB); 
$authAdapter->setTableName('user'); 
$authAdapter->setIdentityColumn("user_name"); 
$authAdapter->setCredentialColumn("user_password"); 
//get values 
$username = $request->getParam('username'); 
$password = $request->getParam('password'); 
//set values 
$authAdapter->setIdentity($username); 
$authAdapter->setCredential($password); 

$auth = Zend_Auth::getInstance(); 
//to store in session 
$auth->setStorage(new Zend_Auth_Storage_Session('front')); 

$authResult = $auth->authenticate($authAdapter); 
if ($authResult->isValid()) { 
    $authAdap = $authAdapter->getResultRowObject(null, "Password"); 
    $auth->getStorage()->write($authAdap); 
    $this->_redirect('/login/controlpannel'); 
} else { 
    $this->_redirect('/login/login'); 
} 
?> 

uzyskanie wartości lub sprawdzić dane przechowywane w sesji związane z użytkownikiem

<?php 
$auth = Zend_Auth::getInstance(); 
$auth->setStorage(new Zend_Auth_Storage_Session('front')); 
if($auth->hasIdentity()){ 
    $data = $auth->getStorage()->read(); 
    print_r($data); 
}else{ 
    $this->_redirect('/login/login'); 
} 
?> 

nadzieja to może pomóc komuś

+0

Ta odpowiedź została wysłana 11 lipca 2014 r., A nie w lipcu 2011 r. –

0
use Zend\Session\Container; 

public function createAction(){ 
    $session = new Container('name'); 
    $session->offsetSet('session_variable', $value); 
} 
//the above codes are used for create session. 

public function take_valuesAction(){ 
    $session = new Container('name'); 
    echo $value = $session->offsetGet('session_variable'); 
} 
//the above codes are used for take values from session. 

public function destroyAction(){ 
    $session = new Container('name'); 
    $session->getManager()->destroy(); 
} 
//the above codes are used for destroy the session.