Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][Symfony2][SF2]Tworzenie i sprawdzanie sesji
dawid22441
post
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 29.04.2014

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


Witam

W "normalnym" programowaniu mam takie zabezpieczenie :
  1. if( !isset( $_SESSION['nick'] ) )
  2. exit("brak uprawnień");

zmienna sesyjna nick byla tworzona podczas logowania , jesli znaleziono uzytkownika o podanych parametrach to tworzono ta zmienna i przechodzilo sie do podanego pliku.

jak takie sprawdzanie i tworzenie sesji przy logowaniu stworzyc w SF2?

Pozdrawiam

Probowalem tak :

  1. $session = new Session();
  2. $session->start();
  3. $session->set('name', 'Test');


wczesniej dodalem
  1. use Symfony\Component\HttpFoundation\Session\Session;


w pliku widoku chcialem wyswietlic sesje wiec zrobilem
  1. return $this->render('dawidCmsBundle:Page:session.html.twig', array(
  2. 'name' => $session->get('name')
  3. ) );


plik twig:
  1. name: {{app.session.name}}

jednak dostaje komunikat:Failed to start the session: already started by PHP.
Go to the top of the page
+Quote Post
kapslokk
post
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


  1. $session = $request->getSession();

Z tym, że musisz mieć Request $request jako parametr akcji.

Więcej tutaj:
http://symfony.com/doc/current/book/controller.html
Szukaj "Managing the Session"

Ten post edytował kapslokk 21.05.2016, 19:56:39
Go to the top of the page
+Quote Post
dawid22441
post
Post #3





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 29.04.2014

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


super
  1. $session = $this->get('session');


działa

tylko mam pytanie ,zalozmy ze mam kilka metod ,w kilku roznych kontrolerach.

zalozmy ze w jednej tworze sesje, a chcialbym ja sprawdzac we wszystkich

wiec we wszystkich metodach musze pisac na starcie
  1. $session = $this->get('session');
  2. $session->start();


czy moze istnieje szybsze rozwiazanie ?
Go to the top of the page
+Quote Post
kapslokk
post
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Edytowałem post i wrzuciłem tam $session = $request->getSession(); . Tego powinieneś używać, nie będziesz musiał startować sesji
Go to the top of the page
+Quote Post
dawid22441
post
Post #5





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 29.04.2014

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


oki ,dzieki za pomoc (IMG:style_emoticons/default/smile.gif)

tylko powiedz mi czy jesli w kontrolerze mam przykladowo 10 metod to w kazdej musze to wklejac:
$session = $request->getSession();
?
nie ma opcji aby to jakos odwolywalo sie do wszystkich metod ?
Go to the top of the page
+Quote Post
kapslokk
post
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Nie jestem pewien czy to zadziała, ale możesz spróbować w konstruktorze kontrolera zrobić
$this->session = $request->getSession(); i później w metodach używać $this->session. Ale tak jak mówie - nie jestem pewien, nigdy nie testowałem.
Go to the top of the page
+Quote Post
dawid22441
post
Post #7





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 29.04.2014

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


oki, sprawdze potem

mam jeszcze pytanie odnosnie tego jak sprawdzic w pliku twig czy dana sesja istnieje ?
normalnie robie to tak if( isset( $_SESSION['name'] ) )

probowalem tak:
{% if app.session.get('name') is defined %}

test

{% endif %}

jednak to nie dziala, wyswietla test nawet gdy sesji nie ma

Ten post edytował dawid22441 21.05.2016, 20:22:21
Go to the top of the page
+Quote Post
kapslokk
post
Post #8





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Może {% if app.session.get('name') is not null %}? Zależy co chcesz sprawdzić. Możesz też przypisać sobie w kontrolerze odpowiednią zmienną pobierając ją z sesji.
Go to the top of the page
+Quote Post
dawid22441
post
Post #9





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 29.04.2014

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


tak, juz przypisalem .

stworzylem tez konstruktor i w nim chcialem sobie ustawic zmienna _session jednak dostaje blad

konstruktor wyglada tak:

  1. private $_session;
  2.  
  3. public function __construct(Request $request) {
  4. $this->_session = $request->getSession();
  5. }


a komunikat:

Catchable Fatal Error: Argument 1 passed to dawid\CmsBundle\Controller\PageController::__construct() must be an instance of Symfony\Component\HttpFoundation\Request, none given, called in /home/dawid_t/ftp/symfony/symfony/app/cache/dev/classes.php on line 2220 and defined

wiesz moze czy da sie to jakos naprawic ?
Go to the top of the page
+Quote Post
kapslokk
post
Post #10





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


No tak jak mi się zdawało - nie działa (IMG:style_emoticons/default/tongue.gif) Raczej nie naprawisz : )
Go to the top of the page
+Quote Post
dawid22441
post
Post #11





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 29.04.2014

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


no to ze nie działa to widze (IMG:style_emoticons/default/biggrin.gif)

czyli nie ma opcji zeby to jakos usprawnic?

troche lipa w kazdej metodzie wpisywac to samo (IMG:style_emoticons/default/smile.gif)

http://symfony.com/doc/current/cookbook/fo...pe-as-a-service

tutaj mozna jakos ustawic konstruktor
Go to the top of the page
+Quote Post
kapslokk
post
Post #12





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Ale to jest do serwisów a nie kontrolerów.

Ten post edytował kapslokk 21.05.2016, 21:12:05
Go to the top of the page
+Quote Post
dawid22441
post
Post #13





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 29.04.2014

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


no trudno, dzieki za pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #14





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


Czekaj, czekaj... nie bardzo rozumiem co chcesz osiągnąć?

---EDIT

Dobra, chyba zrozumiałem...

Ogólnie to chodzi Ci o sprawdzanie:
- Czy użytkownik jest zalogowany
  1. // Controller
  2. // Pobierz token
  3. $token = $this->get('security.token_storage')->getToken();
  4. if(null !== $token && $token->getUser() instanceof UserInterface){
  5. //zalogowany
  6. }

- Czy użytkownik posiada uprawnienia do X
  1. // Controller
  2.  
  3. $authorizationChecker = $this->get('security.authorization_checker')
  4. if(true === $authorizationChecker->isGranted('ROLE_X')){
  5. // posiada uprawnienie
  6. }


W przypadku 2go rozwiązania (sprawdzanie uprawnień) nie musisz sprawdzać czy użytkownik jest zalogowany (nie musisz wykonywać obu sprawdzeń).

Dodatkowo tutaj(2gi sample) masz opcję przez adnotacje (im więcej w serwisie tym wolniej).



Jeżeli robiłeś sprawdzanie "zalogowania" inaczej, to robiłeś to źle, albo inaczej... nie tak jak mogłeś czy też powinieneś.


Ten post edytował kpt_lucek 21.05.2016, 22:05:46
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 14:46