![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Szukałem na forum dość intensywnie, ale nie znalazłem takiego zagadnienia. Próbuję ustawić czas trwania sesji w taki sposób: Problem objawia się w ten sposób, że cookie jest ustawiane z danym czasem, a przy odświeżaniu strony czy też przechodzeniu na inne strony ten czas nie jest aktualizowany. Przykładowo ustawiam sobie na 20 sekund. Wywołuję stronę i kontroluję sesję za pomocą wyświetlenia session_id(); Przy pierwszym wywołaniu - pojawia się session_id danej sesji. Przy próbie odświeżania - zmienia się po 20 sekundach. Przy próbie przejścia na inną stronę po 10 sekundach, nie ustawia nowego czasu trwania sesji, tylko nadal leci "stary" licznik i po kolejnych 10 sekundach sesja wygasa, tworzony jest nowy identyfikator sesji. W jaki sposób temu zapobiec? Jak ustawić, żeby przy każdym odświeżeniu strony czy przejściu na inną czas ważności sesji/cookie z session_id był ustawiany ponownie na ustaloną wartość? Hm, jeśli mógłbym prosić o pomoc, odesłanie chociaż w przybliżeniu do konkretnej części manuala... Byłoby super, bo niestety sam nie potrafię sobie poradzić z tym problemem. Przestawienie session.gc_maxlifetime = 1440 na inną wartość (w php.ini na 20 sekund przykładowo) i podmiana session.gc_probability = 100 - nic nie daje, sesja trwa i dłużej niż 20 sekund. Prosiłbym bardzo o wskazówki, jak wykonać to, żeby sesja trwała określony czas, a za każdym odświeżeniem/wywołaniem strony ten czas był wydłużany. Przy założeniu, że korzystam z cookies do przetrzymywania session_id. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
No to dajesz wtedy setcookie z nazwą sesji + identyfikatorem za każdym razem. :]
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Pytanie tylko mi się nasuwa jedno: jeśli używam session_start i setcookie jednocześnie - to czy one nie będą się ze sobą kłócić? Czy może jest jakaś zasada, które użyć jako pierwsze?
Oczywiście nie mówię na razie o buforowaniu, zakładam chwilowo, że będzie to prosty skrypt, który na samym początku ma: Czy może w cookie "nadpisać" PHPSESSID? I czy chcąc zakończyć sesję (tzw. "wylogowanie", przed minięciem czasu bezczynności) muszę potem usuwać cookie ustawiając je na nowo z ujemnym czasem? Ten post edytował radabus 18.08.2009, 13:38:46 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 15 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przedewszystkim mylisz sesje z ciastkami.
To sa dwie rozne rzeczy, a wiec mozesz stosowac je osobno jak i jednoczesnie. Nie beda sie klocic. Musisz pamietac tylko, ze obie zmienne, ciastka jak i sesje, musza byc zawsze zainicjowane przed wyslaniem czegokolwiek na stronie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Trochę pogmatwałem. Chodziło mi o to, że session_start(); wysyła automatycznie cookie, tak samo jakbym zrobił
Czy teraz zgodnie z tym, co napisał erix, będzie poprawny taki kod: - bo w sumie tak mi wychodzi na logikę... I teraz za każdym odświeżeniem strony będzie to ciasteczko miało ważność odnowioną? Czy może trzeba jeszcze użyć session_set_cookie_params? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 15 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie.
session_start(); jedynie fizycznie na serwerze otwiera albo odczytuje specjalny folder potrzebny do przechowywania zmiennych tam zawartych. Dokladnie to sa pliki o nazwach zmiennych i zawartoscia tych zmiennych, dla kazdego uzytkownika przebywajacego na stronie. Zapisywac i odczytywac zmienne z sesji mozna w dowolnym momencie strony $_SESSION['nazwa'] = 'cos'; , echo $_SESSION['nazwa']; . Nic nie jest przesylane wraz z ta instrukcja. Z ciastkami jest inaczej. Zmienne z ciastek sa przesylane wraz z naglowkiem strony i dlatego jest wymog zeby je zapisac lub odczytac przed wyslaniem czegokolwiek na stronie. Jak juz wykonasz chociaz jedno echo lub jakis inny rozkaz wyswietlajacy cos na stronie to juz po zabawie. Serwer zglosi natychmiast w ostatnim wypadku odrazu blad cachelimiter. Zywotnosc ciastek zapisujesz wraz ze zmienna w setcookie i tak na prawde to przegladarka decyduje kiedy ja skasowac lub pozostawic. Jesli dodasz do ciastka 20 sekund to za dwadziescia sekund po wejsciu na dowolna strone komputer przejdrzy katalog z ciastkami i jesli ktorych czas jest przedawniony to zmienna zostaje skasowana. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam, ale trochę namieszałeś. Z tego, co ja rozumiem, to kiedy robię tak:
To automatycznie jest wysyłane do przeglądarki ciasteczko - jego nazwa to "PHPSESSID", zawartość to session_id (czyli przykładowo c7b33b24c2d13ef2b13167f467bfd9f1), a ważność to 20 sekund (czyli przykładowo "Wygasa" 18 sierpnia 2009 15:39:12). To dostaję błąd Fatal error: Function name must be a string in [path] on line [x] Poprawka, usunąłem nawiasy, żeby uniknąć błędu. Wygląda to tak: Tak przynajmniej zrozumiałem, że należy to zrobić. Ale problemu nie rozwiązałem w ten sposób - nadal przy odświeżaniu strony czas życia ciasteczka nie jest przedłużany o kolejne 20 sekund, tylko wygasa... I potem ustawiana jest nowa sesja. Zgodnie z tym, co napisał erix powinno być dobrze... Dlaczego więc tak nie jest i czas ważności ciasteczka przy odświeżaniu danej strony nie jest aktualizowany? Ten post edytował radabus 18.08.2009, 14:56:56 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Nie. session_start(); jedynie fizycznie na serwerze otwiera albo odczytuje specjalny folder potrzebny do przechowywania zmiennych tam zawartych. Dokladnie to sa pliki o nazwach zmiennych i zawartoscia tych zmiennych, dla kazdego uzytkownika przebywajacego na stronie. Zapisywac i odczytywac zmienne z sesji mozna w dowolnym momencie strony $_SESSION['nazwa'] = 'cos'; , echo $_SESSION['nazwa']; . Nic nie jest przesylane wraz z ta instrukcja. Najpierw poczytaj, potem się wypowiadaj. session_start wysyła też ciasteczko sesyjne, jeśli nie jest ono obecne, ale go nie przedłuża. Kolejny nabijacz postów tylko dla testu? Cytat Tak przynajmniej zrozumiałem, że należy to zrobić. Ale problemu nie rozwiązałem w ten sposób - nadal przy odświeżaniu strony czas życia ciasteczka nie jest przedłużany o kolejne 20 sekund, tylko wygasa... I potem ustawiana jest nowa sesja. Ciekawe, skąd tę zmienną bierzesz... Czasem wystarczy tylko komentarze do funkcji przejrzeć, nie rozumiem dlaczego nikt tego nie robi... http://pl2.php.net/manual/en/function.sess...arams.php#78930 -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki erix za nakierowanie, nie przyszło mi do głowy, żeby czytać te komentarze. Zawsze zostaje nauczka na przyszłość
![]() W każdym razie, trochę sobie zmodyfikowałem przykład i działa:
Jak rozumiem, można by go po prostu okroić do: i też będzie działać. Przynajmniej mi działa i odświeża czas ważności ciasteczka przy każdym przeładowaniu strony. Trochę nie rozumiem zatem, dlaczego autor komentarza wstawia tam warunek: Skoro "krótszy" przykład działa niezależnie od tego, czy cookie jest ustawione, czy nie - po prostu je nadpisuje, aktualizując czas ważności ciasteczka. Ten post edytował radabus 18.08.2009, 16:50:03 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 15 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
No racja ... napisalem tak dla uproszczenia zeby bylo
wiadomo o co chodzi. Roznica polega na tym ze ciastko jest zapisywane na dysku uzytkownika, a sesja na dysku serwera. I propos nie musze sobie nabijac postow bo mnie to nie jest do niczego potrzebne. Ten post edytował CyberDuck_ 18.08.2009, 18:48:57 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.04.2025 - 08:05 |