![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dobry wieczór,
mam nadzieję, że znajdzie się użytkownik zechcący odpowiedzieć na moje prosto-głupie pytanie. A jest to pytanie straszne: do czego służy sesja? Jak ją wykorzystać? Użytkownik mi się zalogował za pomocą swojego loginu i hasła i żeby poszczególne strony, na które klika "wiedziały", że to on - należy wykorzystać sesję. Ale jaki dokładnie jest mechanizm wykorzystania sesji? Z góry dziękuję za odpowiedź. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Załóżmy że skrypt ma wyświetlać na podstronie nick zalogowanego, np. Zalogowany jako Mateusz. $_POST tablica po kolejnym przeładowaniu przestaje być ważna (spróbuj dać echo $_POST['cos'] na różnych podstronach, zobaczysz że wyświetli tylko raz po naciśnięciu submita). Dzięki sesji, ten login jest dostępny cały czas aż do wyłączenia przeglądarki praktycznie lub wygaśnięcia sesji po czasie (php.ini).
Dzięki
Możemy na każdej podstronie, wszędzie gdzie chcemy wyświetlać zawartość $_SESSION['nick']. Dzięki temu że sesja od czasu utworzenia jest aktualna przez cały czas (możemy odświeżać, cofać itp. a sesja jest) sprawdzać czy user jest zalogowany, np. przy poprawnym wpisaniu hasła dajemy
a potem na każdej podstronie do której ma dostęp tylko user sprawdzamy
To tak w najwiekszym skrocie. Mysle ze cos zrozumiales, sa to same podstawy, ogolnie ale na poczatek mysle wystarczy (za ew. bledy przepraszam) aha i pamietaj o na samym poczatku strony w 1 linijce -------------------- O! Zimniok :P
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 115 Pomógł: 23 Dołączył: 27.06.2009 Skąd: Jaworzno Ostrzeżenie: (0%) ![]() ![]() |
sesja to element tablicy $_SESSION . wykorzystuje się je do przekazywania danych pomiędzy stronami. w sesji możesz np przechowywać unikalny kod użytkownika wygenerowany przy logowaniu. na każdej podstronie porównujesz ten kod z kodem w bazie i w ten sposób sprawdzasz tożsamość usera.
// kurde już refleks nie ten ![]() Ten post edytował paw-e-l 23.10.2009, 21:50:57 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 221 Pomógł: 14 Dołączył: 11.03.2009 Skąd: Lubaczów Ostrzeżenie: (0%) ![]() ![]() |
ja Ci powiem tyle ze nie rozumialem sesji - tzn. jak to dziala dopuki nie wyswietlilem sobie tego identyfikatora sesji a pozniej juz jakos poszlo z ta sesja;-)
po odswierzeniu strony numerki sie zmieniaja;-) a zeby je zachowac mozna to zrobic np. przypisujac id sesji danemu userowi;-) Pozdrawiam |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za dotychczasowe odpowiedzi. Wstyd ogromny zadawać takie pytania, bo czuję, że to same podstawy, niemniej chyba zaczyna mi coś switać :]. Proszę jeszcze o sprawdzenie czy moje myślenie jest poprawne:
W bazie mam tabelę z polami 'id', 'hasło', 'login', 'imię' oraz 'id_sesji'. Użytkownik loguje się, wiem dokładnie który wiersz (albo inaczej - jednoznacznie wskazane 'id') w tabeli jest związane z tym użytkownikiem. Rozpoczynam sesję i pobieram numer tej sesji Teraz tak, session_id() należy chyba wpisać w pole 'id_sesji' w bazie danych w wierszu właściwym dla zalogowanego użytkownika? Czy dobrze rozumiem, że funkcja session_id sięga do danych zapisanych na dysku komputera użytkownika, czyli można na każdej podstronie wywołując session_id() odnaleźć wiersz w bazie MySQL i tym samym zidentyfikować użytkownika, który stronę przegląda? Czy może jakoś inaczej trzeba odnajdywać ID sesji, które przypisane jest użytkownikowi przeglądającemu podstrony? Ten post edytował naj 23.10.2009, 22:12:47 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 16.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Prościej jest zapisać dane użytkownika do tablicy sesyjnej (można zrobić wielowymiarową), i wrzucić do niej najważniejsze dane użytkownika. Np.
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 221 Pomógł: 14 Dołączył: 11.03.2009 Skąd: Lubaczów Ostrzeżenie: (0%) ![]() ![]() |
Sesja dziala do momentu zamkniecia przegladarki - czyli jak zamkniesz badz zniszcysz sesje to przy ponownym uruchomieniu strony dostaniesz nowy identyfikator.
Logujesz sie na strone i podajac login i haslo skrypt szuka cie w bazie danych czy taki user i haslo sie zgadzaja. Jesli tak to mozesz zrobic tak : Logiujesz sie i podczas logowania dajesz : session_regenerate_id() - wtedy zmienia ci sie id sesji. nastepnie zapisujesz to id sesji do bazy (mozesz dodatkowo sie zabezpoieczyc i wrzucic do bazy ip oraz przegladarke jakiej uzywasz w danym czasie) - najlepiej w osobnej tabeli ktora ma tymczasowe dane - czyli takie ktore sie skasuja po wylogowaniu - pamietaj aby dac po wylogowaniu session_destroy(). druga tabelka moze wygladac tak : id, id_usera, id_sesji, ip_usera, przeglagarka Robisz osobny skrypt ktory dolaczysz do kazdej podstrony a w nim np:
mniej wiecej tak to wyglada - sory jesli cos zle napisalem ale dawno robilem te sesje:/ Pozdrawiam |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czyli majac oddzielna baze, w ktorej zapisane zostalo ID sesji na każdej z podstron muszę porównać session_id() z tym co mam zapisanego w bazie. Jeśli jest takie w bazie, znaczy to, że użytkownik jest zalogowany i mogę pobrać jego id itp?
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 221 Pomógł: 14 Dołączył: 11.03.2009 Skąd: Lubaczów Ostrzeżenie: (0%) ![]() ![]() |
ja juz nie pamietam - bo gdzies zgubilem skrypt w ktorym robilem sesje - ale np. mozesz tak porownac id_sesji z tym ktore aktualnie masz. Bo gdy podasz dobry login i haslo i sie zalogujesz to zostaje zmienione id_sesji (jak uzyjesz session_regenerate_id()) i zapisujesz nowe id sesji w bazie w osobnej tabelce ktora jest tymczasowa - ale jak ja stworzyc musisz poszukac na google bo ja nie wiem - i do niej wpada tez id usera zalogowanego. dane w tej tabelce sa do zakonczenia polaczenia z baza wiec sie pozniej same kasuja - jakos tak to dziala.
W kazdym badz razie pozniej piszesz taki skrypt ktory sprawdza ci czy session_id() == id z bazy danych i dolanczasz to do kazdej podstrony np.:
i pozniej do kazdej strony na popczatek dorzucasz :
i tak to mniejwiecej wyglada - przynajmiej ja tak bym to widzial;-) Pozdrawiam |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
dorzucę swoje pytanie do tematu, a czy stosując obiektowy php (którego notabene nie znam za bardzo, ale tak przyszło mi do głowy), można przy logowaniu tworzyć obiekt klasy np. User i w niej zapisać id sesji, przeglądarkę itd,
bez konieczności przy każdorazowym zmianie strony wysyłać zapytanie do bazy. Jest to możliwe? Jeśli tak to może jakiś prosty przykładzik. Pozdrawiam |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tua1
NIe znam się na programowaniu obiektowym. Z drugiej strony przy sesjach jest już zaimplementowany mechanizm, który pozwala obyć się bez zapytań do bazy - rejestrowanie zmiennych związanych z sesją. Jeśli w swoim skrypcie stronajeden.php używasz zmiennej $city
i potrzebujesz jej na innych podstronach to możesz zarejestrować ją za pomocą funkcji Dzięki temu na kolejnej podstronie stronadwa.php po wystartowaniu sesji będziesz miał dostęp do zmiennej $city. Wykonanie czegoś takiego w stronadwa.php: Powinno zwrócić wartość zmiennej $city ze skryptu w stronajeden.php, czyli "Puck". Mam nadzieję, że to wyjaśnia sprawę. Dodam, że cała moja wiedza pochodzi z poniższej strony: http://4programmers.net/PHP/Sesje_w_PHP |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 23.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
dzięki za szczegółową odpowiedź.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 221 Pomógł: 14 Dołączył: 11.03.2009 Skąd: Lubaczów Ostrzeżenie: (0%) ![]() ![]() |
z tymi sesjami to wogule jest skomplikowana sprawa - jak dla mnie. jest na pewno kilka mozliwosci sparwdzania tego id czy przez baze czy przez rejestrowanie sesji. Trzeba samemu poprubowac i sie odnalesc w tym - to chyba najlepsza nauka;-)
pozdrawiam |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.04.2025 - 06:15 |