Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czas trwania sesji - możliwe sposoby
Forum PHP.pl > Forum > PHP
Najki
Proszę o podanie wszystkich możliwych sposobów na ustawienie sesji na OKREŚLONY w skrypcie czas, gdy session_set_cookie_params nie działa, a nie mam dostępu do php.ini. Ciasteczka odpadają winksmiley.jpg.
yeti
Możesz rejestrować timestamp i w momencie odświeżenia porównywać go z aktualnym czasem i czasem wygasania. Metody realizacji? Zapis do DB albo do zmiennych sesji, zależy do czego to ci jest potrzebne.
Najki
Można bardziej łopatologicznie? tongue.gif
yeti
Możesz rejestrować timestamp i w momencie odświeżenia porównywać go z aktualnym czasem i czasem wygasania. Metody realizacji? Zapis do DB albo do zmiennych sesji, zależy do czego to ci jest potrzebne.

Oki, no to na zmiennych sesji:

user wchodzi na stronę, a w skrypcie:

  1. <?php
  2.  
  3.  
  4. if(!isset($_SESSION['expire']){
  5.  $_SESSION['expire'] = 60;
  6. }
  7.  
  8. if(isset($_SESSION['timestamp']){
  9.  if((time() - $_SESSION['timestamp']) > $_SESSION['expire']){
  10. // tu ładujesz kod, który chcesz wykonać jeżeli czas minął
  11.  }
  12.  else{
  13. $_SESSION['timestamp'] = time();
  14.  }
  15. }
  16.  
  17. ?>


Pisałem na kolanie, ale powinno być ok. Oczywiście wartość $_SESSION['expire'] jest dowolna, czyli taka jak Ci potrzeba smile.gif
Najki
To sprawi, że sesja będzie trwała 60 sekund, tak ?
bregovic
Chyba raczej tak:
  1. <?php
  2.  
  3.  
  4. if(!isset($_SESSION['expire'])
  5. {
  6.  $_SESSION['expire'] = 60;
  7. }
  8.  
  9. if(isset($_SESSION['timestamp'])
  10. {
  11.  if((time() - $_SESSION['timestamp']) > $_SESSION['expire'])
  12.  {
  13.  die();
  14.  }
  15. }
  16. else
  17. {
  18.  $_SESSION['timestamp'] = time();
  19. }
  20.  
  21. ?>

Teraz sesja bedzie trwala 60 sekund.
yeti
bregovic: Hmm, nie za bardzo rozumie na czym polega Twoje usprawnienie blink.gif
bregovic
Zle skonstruowales if'y:
  1. <?php
  2.  
  3. if(isset($_SESSION['timestamp']){
  4.  if((time() - $_SESSION['timestamp']) > $_SESSION['expire']){
  5. // tu ładujesz kod, który chcesz wykonać jeżeli czas minął
  6.  }
  7.  else{
  8. $_SESSION['timestamp'] = time();
  9.  }
  10. }
  11.  
  12. ?>

To spowodowaloby ni mniej ni wiecej tyle, ze jesli nieustawiona zmienna sesyjna timestamp jest ustawiona, to sprawdzamy czy sesja nie jest za stara - jesli nie jest zastara to ustawiamy timestamp. Problem polega na tym ze timestamp nigdy nie zostanie ustawiona - bo instrukcja ustawiajaca ja (na lini 8), jest zamknieta w ifie do ktorego wykonania nie dojdzie.
yeti
Masz rację, mówiłem, że pisane na kolanie ;p
Z tym, że to rozwiązanie nie uwzględnia aktywności użytkownika. Sesja wygasa po określonym czasie. Jeśli chodziłoby o określony czas bezczynności:

  1. <?php
  2.  
  3.  
  4. if(!isset($_SESSION['expire']){
  5.  $_SESSION['expire'] = 60;
  6. }
  7.  
  8. if(isset($_SESSION['timestamp']){
  9.  if((time() - $_SESSION['timestamp']) > $_SESSION['expire']){
  10. // tu ładujesz kod, który chcesz wykonać jeżeli czas minął
  11.  }
  12.  else{
  13. // jeśli aplikacja ma wylogowywać po określonym czasie BEZCZYNNOŚCI
  14. $_SESSION['timestamp'] = time(); 
  15.  }
  16. }
  17. else{
  18.  $_SESSION['timestamp'] = time();
  19. }
  20.  
  21. ?>
Najki
To w końcu najlepiej którego z tych skryptów użyć, aby zalogować użytkownika na dobę? tongue.gif
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.