Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [zend] nie wyświetlają się wartości zmiennych sesyjnych
nieraczek
post 13.11.2008, 14:05:48
Post #1





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

Ostrzeżenie: (0%)
-----


Chcę żeby po zalogowaniu użytkownika w zmiennych sesyjnych były zapamiętywane: id_uzytkownika i jego imie pobrane z tabeli zeby potem mozna je bylo wyswietlic na kazdej stronie dostepnej po zalogowaniu, a przy uzyciu funkcji ZF do sesji nie udaje mi sie potem wyswietlic wartosci zmiennych sesyjnych.

Klasę kontrolera logowania: class AuthController extends Zend_Controller_Action zrobiłem wg tego tutoriala:
http://developer.denken.com.br/wp-content/...nd-auth_105.pdf

W funkcji odpowiedzialnej w tym kontrolerze za logowanie po tym jak juz zweryfikowano tozsamosc logujacego dałem:
  1. <?php
  2. $login=$this->getRequest()->getPost('login'); //pobiera login wpisany przez uzytkownika w formularzu logowania
  3. $przestrzennazw1 = new Zend_Session_Namespace('sesja1');
  4.                    
  5. $uzytkownicyTabela = new UzytkownicyTable();
  6.                    
  7. $uzytkownik = $uzytkownicyTabela->znajdz($login); //zwraca wiersz tabeli dla danego uzytkownika
  8.  
  9. /*
  10. mimo ze mam jeden wiersz to musze zrobic ponizej petle bo jakbym zapisal tak:
  11. $przestrzennazw1->id_uzytkownika = $uzytkownik['id_uzytkownika'];
  12. $przestrzennazw1->imie = $uzytkownik['imie'];
  13. to nic by nie zostało przypisane do zmiennych sesyjnych
  14. */                    
  15. foreach($uzytkownik as $wiersz):
  16. $przestrzennazw1->id_uzytkownika = $wiersz['id_uzytkownika'];
  17. $przestrzennazw1->imie = $wiersz['imie'];
  18. endforeach;
  19. ?>



Jak zamiast tych funkcji Zend Frameworka zrobię w normalnym PHP to o dziwo działa.
  1. <?php
  2. $login=$this->getRequest()->getPost('login');
  3.  
  4. session_start(); //rozpoczecie sesji - nawet jak to pomine to i tak wszystko dziala, nie wiem czemu
  5.  
  6. $uzytkownicyTabela = new UzytkownicyTable();
  7. $uzytkownik = $uzytkownicyTabela->znajdz($login); //zwraca wiersz tabeli dla danego uzytkownika
  8.  
  9.  
  10. foreach($uzytkownik as $wiersz):
  11. $_SESSION['id_uzytkownika'] = $wiersz['id_uzytkownika'];
  12. $_SESSION['imie'] = $wiersz['imie'];
  13. endforeach;
  14. ?>








W funkcji odpowiadającej za wylogowanie w tym kontrolerze dodałem:
  1. <?php
  2. unset ($przestrzennazw1->id_uzytkownika);
  3. unset ($przestrzennazw1->imie);
  4. ?>




Na innych stronach dostepnych po zalogowaniu w kontrolerach umieszcza się funkcję:
public function preDispatch()
{
}
Nic w niej związanego z sesjami nie dodawałem.

I jak próbuję na dowolnej stronie dostępnej po zalogowaniu wyświetlić wartości zmiennych sesyjnych:
  1. <?echo $przestrzennazw1->id_uzytkownika ?>
  2. <?echo $przestrzennazw1->imie ?>


To nic się nie wyświetla, dlaczego ?

Ten post edytował nieraczek 13.11.2008, 14:07:20
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
tomek_
post 14.11.2008, 09:06:23
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 4
Dołączył: 6.11.2008
Skąd: Bytom

Ostrzeżenie: (0%)
-----


rozumiem że prubujesz je wyświetlić w pliku widoku?

jeśli tak to czy masz w kontrolerze coś takiego

Kod
$this->view->przestrzennazw1 = $przestrzennazw1;


i co Ci pokazuje jak w kontrolerze dasz 

Kod
ZEND_DEBUG::dump($przestrzennazw1);



// lub od razu całą tablice sesji 

ZEND_DEBUG::dump($_SESSION,'tablica SESSION: <br />');


--------------------
Dysortografik -> nie besztać za błędy ;P

pomogłem ? -> kliknij "pomógł" ;)
Go to the top of the page
+Quote Post
nieraczek
post 14.11.2008, 12:35:43
Post #3





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

Ostrzeżenie: (0%)
-----


W końcu udało mi się zrobić i działa - tylko nie wiem czy to jest całkowicie poprawne.

W kontrolerze odpowiedzialnym za logowanie zrobiłem tak:
  1. <?php
  2. class LoginController extends Zend_Controller_Action
  3. {
  4. public function zalogujAction()
  5. {
  6.  
  7. ......................................................
  8.  
  9. $login=$this->getRequest()->getPost('login');
  10. $uzytkownicyTabela = new UzytkownicyTable();
  11. $uzytkownik = $uzytkownicyTabela->znajdz($login);
  12.  
  13. $osoba = new Zend_Session_Namespace('logowanie');
  14.  
  15. foreach($uzytkownik as $wiersz):
  16. $osoba->id_uzytkownika = $wiersz['id_uzytkownika'];
  17. $osoba->imie = $wiersz['imie'];
  18. endforeach;
  19.  
  20. ...................................................
  21.  
  22. }
  23.  
  24. }
  25. ?>




W innym kontrolerze "kontroler1" do którego akcji-stron mają dostęp tylko zalogowani użytkownicy chcę wykorzystać wartości zmiennych sesyjnych (utworzonych w kontrolerze odpowiedzialnym za logowanie LoginController). W akcji tego kontrolera potrzebuję wartości zmiennej sesyjnej 'id_uzytkownika' więc robi to tak jak niżej tylko zastanawia mnie, że znowu muszę pisać $osoba = new Zend_Session_Namespace('logowanie'); tak jakbym znów tworzył nową przestrzeń nazw, która już przecież istnieje w kontrolerze logowania, ale jak tego nie zrobię to nie bedę mógł pobrać wartości zmiennej sesyjnej. I to działa, ale może jednak nalezy to robić jakoś inaczej questionmark.gif

  1. <?php
  2. class Kontroler1Controller extends Zend_Controller_Action
  3. {
  4. public function akcja1Action()
  5.    {
  6.        $osoba = new Zend_Session_Namespace('logowanie');
  7.  
  8.        $zmienna = $osoba->id_uzytkownika;
  9.        .....................................................
  10.    
  11. }
  12. }
  13. ?>



Tak samo na stronie "akcja1.phtml" jak chcę wyświetlić wartość zmiennej sesyjnej 'imie' to najpierw muszę napisać: $osoba = new Zend_Session_Namespace('logowanie');:
  1. <?
  2. $osoba = new Zend_Session_Namespace('logowanie');
  3.  
  4. echo $osoba->imie;
  5.  
  6. ?>




Czy to się na pewno tak poprawnie robi ?
Go to the top of the page
+Quote Post
tomek_
post 17.11.2008, 12:11:15
Post #4





Grupa: Zarejestrowani
Postów: 40
Pomógł: 4
Dołączył: 6.11.2008
Skąd: Bytom

Ostrzeżenie: (0%)
-----


jeśli chcesz kożystać z Zend_Session to poprawnie to robisz 

a jeśli Ci taki zapis nie odpowiada możesz to wyświetlić w taki sposób

Kod
<?
echo $_SESSION["logowanie"]["imie"];
?>


Ten post edytował tomek_ 17.11.2008, 12:11:52


--------------------
Dysortografik -> nie besztać za błędy ;P

pomogłem ? -> kliknij "pomógł" ;)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:35