![]() |
![]() |
-Wieviór- |
![]()
Post
#1
|
Goście ![]() |
Co zrobić, by sesja trwała nawet po wyłączeniu przeglądarki?
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
-------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
-Wieviór- |
![]()
Post
#3
|
Goście ![]() |
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
-------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 6.07.2005 Skąd: Legnica Ostrzeżenie: (0%) ![]() ![]() |
3 parametr setcookie to nie czas życia ciastka, tylko data wygaśnięcia w postaci timestampu (3600*24*30 == 2592000 == 31-01-1970, 01:00:00).
Powinno być, np.
Ten post edytował PiotrLegnica 16.12.2006, 19:37:07 -------------------- SithTemplate
|
|
|
-Wieviór- |
![]()
Post
#6
|
Goście ![]() |
Efektem Twojego przykładu będzie to, że ciastko będzie działało przez 30 dni?
Bo to jakoś mi nie działa, wyłączam przeglądarkę, i dane zapisane w sesji znikają. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
A co zapisujesz do ciastka? Jeśli 1, to po zamknięciu przeglądarki i ponownym jej otwarciu w ciastku będzie 1. Czyli działa.
Może inaczej. Co chcesz, by było zapisane w ciastku? To, że użytkownik jest zalogowany, ustawienia użytkownika (np. motyw graficzny), czy jeszcze coś innego? -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
-Wieviór- |
![]()
Post
#8
|
Goście ![]() |
aaa, to mi nie o to chodziło chyba...
Ciastka z sesją się łączą? Chodzi mi o to, co zrobić, żeby jakaś wartość przypisana do $_SESSION['costam'] była jeszcze "widoczna" po wyłączeniu i włączeniu przeglądarki. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Teoretycznie sesja bazuje na ciastkach, ale w praktyce sprawia to zawsze dużo problemów. Jeśli chcesz przypisać do ciastka jakąś zmienną sesyjną możesz to zrobić w taki sposób (czas "życia" ciastka sam ustawisz
![]()
-------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 6.07.2005 Skąd: Legnica Ostrzeżenie: (0%) ![]() ![]() |
Można też własny handler sesji napisać (i np. do bazy zapisywać [ciastka mają ograniczoną pojemność]).
session_set_save_handler() -------------------- SithTemplate
|
|
|
-Wieviór- |
![]()
Post
#11
|
Goście ![]() |
Ok, ręce mi opadają:
Mam plik index.php, którego zawartość w skrócie wygląda tak:
Plik layout1.php (to zarazem domyślny i wybrany), który includuje w sobie login.php, który wygląda tak:
No i co ja tu jeszcze robię źle, że jak się zaloguję, po czym wyłączę i włączę przeglądarkę, to jestem wylogowany? |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
@PiotrLegnica
Możliwe, że się mylę, ale ciastka nie mają ograniczonej "pojemności". Jedyne co je ogranicza, to szybkość łącza (w końcu trzeba je wysłać od klienta na serwer). -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#13
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
~Wieviór proszę poprawić tytuł o znacznik zgodnie z zasadami forum Przedszkole:
Temat: Tematyka i zasady panujace na forum Przedszkole Już drugi raz o tym zapominasz. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 21.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Teoretycznie sesja bazuje na ciastkach, ale w praktyce sprawia to zawsze dużo problemów. Jeśli chcesz przypisać do ciastka jakąś zmienną sesyjną możesz to zrobić w taki sposób (czas "życia" ciastka sam ustawisz ![]() niezupełnie... sesja nie bazuje na ciastkach, sesja jest zapisywana tylko po stronie serwera, w ciastkach (ewentualnie przekazywany przez adresy url) jest zapisywany tylko identyfikator sesji... i tu się pojawia problem, bo co z tego, że w ciastku zostawimy informacje o identyfikatorze sesji, jak sesja na serwerze dawno już wygaśnie... nie jestem pewien, ale być może pomogłoby ustawienie zmiennej session.gc_maxlifetime na wyższą wartość... ale na pewno nie da się tego ustawić na "nieskończoność" rozwiązaniem mogłoby być też ustawienie swojego katalogu do przechowywania danych sesji (jeśli działamy na serwerze współdzielonym), ale jak ktoś wcześnie wspomniał, utworzenie swojego handlera sesji i zapisywanie danych sesji np. w bazie a jeśli chodzi o ustawianie ciasteczek sesji, to raczej lepszym wyjściem byłoby skorzystanie z session_set_cookie_params, a nie z samego setcookie (przynajmniej jeśli chodzi o ustawienie ciasteczek bezpośrednio dla id sesji) |
|
|
![]()
Post
#15
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
@WereWolf
Napisałem teoretycznie, ponieważ nie jest to temat o ciastkach, lecz o zachowaniu sesji po stronie użytkownika. Tutaj masz informacje w jaki sposób sesje są przechowywane sesje. Cytat Istnieją dwie metody propagacji identyfikatora sesji: - Ciasteczka - Parametry URL'a @Wieviór Twój kod ni działa, ponieważ nigdzie nie sprawdzasz czy ciastka istnieją. Zawsze pokazuje się tekst Witaj lub formularz logowania. Sprawdzasz czy istnieje zmienna sesyjna, która jest pusta. Nie przypisałeś do niej wartości ciastka ($_COOKIE). Zamiast sprawdzać zmienną $_SESSION, sprawdzaj zmienna $_COOKIE. Pamiętaj o walidacji tych zmiennych, ponieważ można je "podrobić". -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 21.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
@WereWolf Napisałem teoretycznie, ponieważ nie jest to temat o ciastkach, lecz o zachowaniu sesji po stronie użytkownika. no właśnie ja zrozumiałem to inaczej... myślałem, że autorowi tematu chodziło tylko o zachowanie sesji na serwerze nawet jeśli użytkownik zamknie stronę, a nie o zachowanie danych po stronie przeglądarki... ale faktycznie chyba jedyne rozwiązanie to zapisanie jej danych bezpośrednio u użytkownika - co raczej nie jest zbyt bezpieczne Ten post edytował WereWolf 17.12.2006, 11:12:46 |
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Cytat myślałem, że autorowi tematu chodziło tylko o zachowanie sesji na serwerze nawet jeśli użytkownik zamknie stronę Jakoś nie potrafię sobie wyobrazić w jaki sposób działa zapamiętywanie sesji po stronie serwera ![]() Do takich rzeczy stosuje się bazy danych lub pliki, ale to już inna historia. Jeśli chodzi o bezpieczeństwo, to się z Tobą zgodzę. Zapamiętywanie w ciastku, czy jest ktoś zalogowany, czy nie to nie jest najlepszy pomysł. Pamiętaj - największym Twoim wrogiem jest użytkownik. Nie możesz zakładać, że jest on świadomym użytkownikiem internetu. Pisane aplikacje muszą być idiotoodporne. -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 21.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jakoś nie potrafię sobie wyobrazić w jaki sposób działa zapamiętywanie sesji po stronie serwera ![]() Do takich rzeczy stosuje się bazy danych lub pliki, ale to już inna historia. niezbyt precyzyjnie się wyraziłem... po prostu wiem, że dane odnośnie sesji nie są zapisywane po stronie usera, tylko na serwerze (przez pliki - zazwyczaj w tmp, albo w bazie, zależnie od ustawień)... w każdym razie - z tego co zrozumiałem chodziło o to, żeby sesja nie wygasała, a co za tym idzie, jej dane nadal były zapisane na serwerze... ale jak już mówiłem, tak się raczej nie da i pozostaje sposób, o którym była mowa ![]() chociaż... tak sobie myślę, że jeśli by skorzystać z własnych handlerów sesji, to w sumie można by ten problem obejść, pod warunkiem, że dane sesji zostawałyby w bazie "na wieki", a po stronie użytkownika nadal był zapisywany tylko identyfikator sesji (co nadal nie jest zbyt bezpieczne) tu pojawia się jeden problem... takie rozwiązanie przy większej liczbie użytkowników bardzo szybko powiększyłoby bazę z danymi sesji... |
|
|
![]()
Post
#19
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Cytat chociaż... tak sobie myślę, że jeśli by skorzystać z własnych handlerów sesji, to w sumie można by ten problem obejść, pod warunkiem, że dane sesji zostawałyby w bazie "na wieki" Dane sesji nie muszą pozostawać w bazie na wieki. Wystarczy ustawić czas wygaśnięcia sesji na jakiś czas, a następnie skrypt w cronie mieliłby bazę i wywalał nieaktualne sesje. Cytat tu pojawia się jeden problem... takie rozwiązanie przy większej liczbie użytkowników bardzo szybko powiększyłoby bazę z danymi sesji... Nie powiększyłoby, ponieważ każdy użytkownik miałby jeden wiesz w tabeli przechowującej sesje. W momencie tworzenia nowej sesji, stara byłaby usuwana. Cytat ...(co nadal nie jest zbyt bezpieczne) Są bardzo dobre sposoby zapewnienia bezpieczeństwa takich sesji ("ciastkowych" również). Nie zapewniają 100% skuteczności, jednak dzięki nim można zabezpieczyć sesje przed przejęciem przez innego użytkownika. Nie ma jednak sensu by rozwodzić się nad sesjami trzymanymi w bazie danych. Najprostszym rozwiązaniem problemu @Wieviór-a są ciastka. -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 21.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dane sesji nie muszą pozostawać w bazie na wieki. Wystarczy ustawić czas wygaśnięcia sesji na jakiś czas, a następnie skrypt w cronie mieliłby bazę i wywalał nieaktualne sesje. Nie powiększyłoby, ponieważ każdy użytkownik miałby jeden wiesz w tabeli przechowującej sesje. W momencie tworzenia nowej sesji, stara byłaby usuwana. w normalnym przypadku tak... ale rozpatruję tu rozwiązanie pytania, które było w pierwszym poście - czyli, żeby sesja trwała "nieskończenie długo", w takim przypadku właśnie dane sesji musiałyby być zachowywane przez cały czas no ale starczy... bo chyba trochę odeszliśmy od tematu ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 22:58 |