Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Sesje, unset?
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Hey. Chciałem zrobić aby wylogowywało po okreslonym czasie. Znalazlem takie cos:

  1. <?php
  2. if(!isset($_SESSION['last_trace']))
  3. {
  4.    $_SESSION['last_trace'] = $now;
  5. }
  6. elseif ((int)$_SESSION['last_trace'] + $expiryTime < $now)
  7. {
  8.    $sessionName = session_name("Sesja");    
  9.    $_SESSION = array();
  10.    if (isset($_COOKIE[$sessionName]))
  11.    {
  12.        setcookie($sessionName, '', $now-40, '/');
  13.    }
  14.        
  15.    $online_off = mysql_query("UPDATE `konta` SET `online`='0' WHERE `username`='".$uzytkownik."'") or die(mysql_error());
  16.    session_destroy();      
  17.    echo '<script language="JavaScript">window.location="index.php?opcja=logowanie";</script>';
  18. }
  19. ?>


I owszem zawsze wylogowuje po tych 40 sek...ale... nawet gdy user jest aktywny ;/ Nie chcielibyscie aby was wylogowalo podczas pisania postu lub przegladania tematów prawda?
Dodałem kod, ktory powinien po kazdym refreshu liczyc czas od nowa. Jednak zalogowany jestem nawet po przekroczeniu tego czasu

  1. <?php
  2. $now = time();
  3. $expiryTime = 20;
  4.  
  5. if(isset($_SESSION['last_trace']))
  6. {
  7. unset($_SESSION['last_trace']);
  8.  
  9. }
  10.  
  11. if(!isset($_SESSION['last_trace']))
  12. {
  13.    $_SESSION['last_trace'] = $now;
  14. }
  15. elseif ((int)$_SESSION['last_trace'] + $expiryTime < $now)
  16. {
  17.    $sessionName = session_name("Sesja");    
  18.    $_SESSION = array();
  19.    if (isset($_COOKIE[$sessionName]))
  20.    {
  21.        setcookie($sessionName, '', $now-40, '/');
  22.    }
  23.        
  24.    $online_off = mysql_query("UPDATE `konta` SET `online`='0' WHERE `username`='".$uzytkownik."'") or die(mysql_error());
  25.    session_destroy();      
  26.    echo '<script language="JavaScript">window.location="index.php?opcja=logowanie";</script>';
  27. }
  28. ?>


pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Nie rób tego w ten sposób.
Skonfiguruj sobie odpowiednio mechanizm sesji: http://pl2.php.net/manual/en/session.confi....gc-maxlifetime i masz problem z głowy

Swoją drogą:
1) Nie wykonuj przekierowania w JS, bo jest ono wolniejsze i względnie często nie będzie w ogóle działać
2) Użytkowników online też źle sobie zaplanowałeś bo w momencie gdy nie wyloguję się tylko wyłączę przeglądarkę nie zostanę wylogowany - o tym jak zrobić "użytkownicy online" było nie raz, więc w szukajce znajdziesz lepsze rozwiązanie
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


To przewidzialem (ten 2 punkt) dlatego chce aby po 5 min ich wylogowywalo automatycznie bo sesja sie skonczy (tu te 40 sek, potem dam 5 min)

no i jak ustawic to session.gc_maxlifetime? co to daje w praktyce?
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
no i jak ustawic to session.gc_maxlifetime?
Albo bezpośrednio w pliku php.ini, albo pośrednio poprzez .htaccess (php_value/php_flag) lub najławiej poprzez ini_set" title="Zobacz w manualu PHP" target="_manual.
Cytat
co to daje w praktyce?
Yyy... to po co ja się staram, linkuję Ci do źródeł ( http://pl2.php.net/manual/en/session.confi....gc-maxlifetime ) skoro nawet nie przeczytasz? Definuje żywotność sesji.
Cytat
To przewidzialem (ten 2 punkt) dlatego chce aby po 5 min ich wylogowywalo automatycznie bo sesja sie skonczy (tu te 40 sek, potem dam 5 min)
Jak nikt nie będzie korzystał ze strony to ich nie wyloguje chyba że przez jakiegoś crona wrzucisz skrypt, który będzie sprawdzał wszystkie sesje - ale to zły pomysł.
Go to the top of the page
+Quote Post
MateuszS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Ile powinienem ustawic w tym session.gc_maxlifetime zeby mi za kazdym refreshem od nowa liczylo czas i zeby po wylaczeniu przegladarki wylogowywalo? Bo fakt dopiero sprawdzalem i dalej pisze ze user jest online mimo wylogowania
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Bo Twój mechanizm "użytkowników online" jest z założenia błędny. Poszukaj jak jest go najprościej zrobić by działał (sam nawet to tu kiedyś pisałem).
Go to the top of the page
+Quote Post
MateuszS
post
Post #7





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Tu nie ma mojego skryptu ilu jest online ;]

Oto i on:
  1. <?php
  2. $zapek = mysql_query("SELECT * FROM `konta` WHERE `online`='1'") or die(mysql_error());
  3.  
  4.  
  5. while($row = mysql_fetch_assoc($zapek))
  6. {
  7. echo '<input type="hidden" value="'.$row['online'].'" name="'.$zliczam++.'">';
  8. }
  9. if($zliczam >= 1)
  10. {
  11. echo 'Na stronie jest ';
  12. }
  13. if($zliczam >= 2)
  14. {
  15. echo '<font color="green"><b>'.$zliczam.' </b></font>zalogowanych użytkowników.';
  16. }
  17. elseif($zliczam == 1)
  18. {
  19. echo '<font color="green"><b>1 </b></font> zalogowany użytkownik.';
  20. }
  21. elseif($zliczam == 0)
  22. {
  23. echo 'Brak zalogowanych użytkowników.';
  24. }
  25. ?>


Ale nie o niego tu chodzi. Pewnie masz racje, moze jest zwykla prowizorka, to ty tu jestes szefem ale mi chodzi o ten skrypt w pierwszym poscie. Z sesjami nie dawno zaczalem i nie znam sie jeszcze na nich dlatego potrzebuje dobrej instrukcji. Nie dalo by sie dodac czegos do tego kodu zeby dzialal odpowiednio? Tzn zeby po kazdym refreshu i przejsciu na podstrony odliczal od nowa? Wydaje mi sie ze wystarczy unset() tyle ze moglem popelnic blad logistyczny. Pozdrawiam
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Zdziwisz się jak Ci powiem, że standardowy mechanizm sesji wbudowany w PHP robi dokładnie to o czym pisesz? I że domyślnie podtrzymuje sesje przez 24 minuty (1440 sekund). A przy pomocy session.gc-maxlifetime możesz sobie ten czas zmienić?

A błąd ze skryptem os. online jest taki, że zakładasz, że zawsze będziesz mógł wylogować użytkownika - a to się raczej żadko zdarza.
btw: wpisz sobie w wyszukiwarkę: "użytkownicy online php"
Go to the top of the page
+Quote Post
MateuszS
post
Post #9





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Aha już czaję dzięki, po prostu wtedy nie za bardzo wiedziałem o co Ci chodzi.

Ustawie sobie go na 5 min i będzie z głowy ;] Dzięki

A powiesz jak to ustawic na innym serwerze niz localhoscie? Na www nie bede mial mozliwosci wejscia do php.ini

Ten post edytował MateuszScirka 28.04.2009, 18:41:15
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


5 minut to strasznie mało czasu - będę czytał jakiś artykuł i mnie wyloguje...

http://forum.php.pl/index.php?s=&showt...st&p=602238
Go to the top of the page
+Quote Post
MateuszS
post
Post #11





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


dalem to przed i po session_start ale lipa ;/

  1. <?php
  2. ini_get('session.gc_maxlifetime');
  3. ini_set('session.gc_maxlifetime', 5);
  4. ?>
Go to the top of the page
+Quote Post
Crozin
post
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Litości...
Cytat
session.gc_maxlifetime specifies the number of seconds after which data will be seen...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 18:18