Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] sesje - pytanie
Forum PHP.pl > Forum > Przedszkole
adam83
Witam,

Mam takie pytanie odnośnie sesji.
W momencie logowania powstaje zmienna sesji np $zalogowany. Na każdej chronionej podstronie pierwsze linie kodu to sprawdzenie czy taka zmienna istnieje, jeśli nie to przekierowanie do strony logowania.
Czy aby zmienna sesji "przeżyła" wymagane jest aby na każdej odwiedzanej po zalogowaniu podstronie na początku był
?
Zrobiłem tak i ostatnio napotkałem dziwne błędy i warningi, pomogło dodanie
.


Widziałem gdzieś że obie komendy są czesto stosowane obok siebie w skryptach logowania, jak to działa? moze mi ktoś wytłumaczyć?
z góry wielkie dzieki.
Pzdr.
Maciek1705
na każdej stronie powinno być:
  1. session_name("nazwa_sesji");


samo session_start to nie wszystko bo na stronie będzie Ci startował sesję ale każdą inną żeby tego nie było daj się nazwe sesji do rozpoznawania sesji na stronie.
adam83
dzięki, ale jak to zrobić jeśli mówimy o sesji w kontekście logowania?

Po uwierzytelnieniu tworzy się sesja o jakimś ID, prawda? Jak mam je wyłapać i zadbać o to aby ta sesja trwała dalej na kolejnych podstronach, a nie rozpoczynała się nowa sesja??

gdyby jeszcze ktoś był miły i wytłumaczył, na czym polega praktyczne działanie ob_start() bo z manuala nie wiele rozumiem..
Helid
Po pierwsze to utwórz plik jaki będzie otwierany na każdej podstronie i w nim zawarty kod. którego zadaniem jest sprawdzanie sesji.
ob_start
Cytat
Przełącza w pozycję ON status wyjściowego buferu PHP. Podczas gdy wyjście jest aktywne wyjścia buforowania nie są wysyłane ze skryptu, a wynik jest przechowywany w wewnętrznym buforze.

Osobiście nie mam pojęcie nt. zastosowania tej funkcji, bynajmniej moje sesje działają bez tego.
Jakiej wersji php używasz?
Hellelujah
Nie musisz pamiętać i rozpoznawać ID, sesja robi to sama i właśnie do tego służy (m.in. do tworzenia i opiekowania się ciastkiem sesyjnym w przeglądarce).
Jednak sesja to mechanizm stosunkowo prosty, warto go troche rozszerzyć. Najlepiej napisz własną funkcję, która rozpocznie sesję, zadba o jej nazwę, a dodatkowo (dla bezpieczeństwa) sprawdzi, czy user nie używa tego samego ID spod innego IP lub innej przeglądarki (bo to by oznaczało kradzież sesji, czyli podszycie się - tego nie chcemy winksmiley.jpg ). Dokładniejsze objaśnienie z przykładami: http://pl.wikibooks.org/wiki/PHP/Sesje#Bez...C5.84stwo_sesji

Aha, oczywiście tą funkcję sesyjną umieść w pliku, o którym mówi Helid - będziesz go sobie includował na każdej podstronie.
230005
Co do ob_start - najlepiej będzie chyba wytłumaczyć na przykładzie:

jeśli przed session_start() będzie jakieś echo, albo skrypt spowoduje że php zwróci błąd (nie fatal error - bo wtedy nie zadziała wcale, raczej jakiś warning) to dostaniesz wiadomość, że "headers alrent sent... cośtam". Funkcja ob_start buforuje wszystko co może zostać wysłane do przeglądarki, a więc w tym wypadku najpierw nagłówki session_start, a dopiero później to co wypluje skrypt.

W każdym razie to, że bez ob_start() skrypt rzucał błędami i ostrzeżeniami oznacza, że session_start umieściłeś za linią wysyłającą wynik, lub powodującą błąd, a powinieneś na samym początku.
adam83
Dziękuje Wam za pomoc.
Odnośnie ob_start() to właśnie dlatego ją stosowałem, bo wyrzucało mi ten błąd z już wysłanym nagłówkiem smile.gif
W miarę jasno napisałeś o co w niej chodzi, opis w manualu jest trochę zagmatwany.

Jeszcze raz dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.