Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Sprawdzanie czy sesja jest aktywna.
maxil
post 15.02.2010, 20:16:15
Post #1





Grupa: Zarejestrowani
Postów: 212
Pomógł: 11
Dołączył: 8.11.2008
Skąd: Sieradz

Ostrzeżenie: (10%)
X----


Witam wszystkich.

Chciałbym się dowiedzieć czy istnieje możliwość sprawdzania czy sesja jest aktywna.
Mam logowanie oparte na sesjach i w bazie danych komórke `active` w której jest zapisywane czy użytkownik jest zalogowany.
Podczas logowania wpisuje tam 1 a podczas wylogowania wpisywane jest 0.
Ale gdy użytkownik zamknie strone to nadal tam jest wpisane 1 i to mi psuje wygląd statystyk, ponieważ nikt nie jest zalogowany a ciągle pokazuje że ktoś jest zalogowany.

Można to w jakiś sposób sprawdzać czy użytkownik aktualnie jest zalogowany czy nie?
Go to the top of the page
+Quote Post
webspy
post 15.02.2010, 20:43:48
Post #2





Grupa: Zarejestrowani
Postów: 186
Pomógł: 9
Dołączył: 3.03.2008

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


Nie wiem czy jest taka mozliwość,
Ja bym dał na początku strony zapytanie czy activ byl aktywny przez ostatnie np 3 min jesli tak to zostawia 1 a jesli nie to zapisuje 0,

A jesli sesja istenieje to aktualizuje activ i zapisuje czas w ktorym ostatnio uzytkownik "odswiezyl" strone,

Wiadomo o co mi chodziło??

Ja zaczynam się uczyć php ale ja tak widzę to rozwiązanie.
Go to the top of the page
+Quote Post
Pilsener
post 15.02.2010, 21:48:01
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Poczytaj pod hasłem "własny mechanizm sesji", "własna obsługa sesji" - jest parę artykułów i nawet gotowe klasy, niestety nie ma takiej możliwości, by skrypt rozpoznał czy user zamknął stronę a się nie wylogował - dobrze jest mu o tym przypominać specjalnym komunikatem (gdy kliknie "wyloguj" odnotowujemy ten fakt). Najczęściej ustawia się po prostu czas ważności ciacha sesyjnego - jeśli user nie wykona żadnej akcji w ciągu powiedzmy 15 minut jest wylogowywany, bo ciacho sesyjne ginie ze starości. Oczywiście własny mechanizm sesji zawiera też licznik osób zalogowanych i sprawdza co jakiś czas, który user ma ważną sesję.
Go to the top of the page
+Quote Post
maxil
post 16.02.2010, 13:15:37
Post #4





Grupa: Zarejestrowani
Postów: 212
Pomógł: 11
Dołączył: 8.11.2008
Skąd: Sieradz

Ostrzeżenie: (10%)
X----


nad własnym mechanizmem sesji jest troche roboty i nie wszędzie zda to rozwiązanie egzamin.
poszukuję trochę prostszego rozwiązania, ma ktoś jakiś pomysł lub propozycje jak to zrobićquestionmark.gif
Go to the top of the page
+Quote Post
griwes
post 16.02.2010, 18:13:30
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 15.02.2009
Skąd: Racibórz/Wrocław

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


Wrzucaj do sesji czas aktywowania (time()). I sprawdzaj, czy time() - tamto > 3 * 60 (3min, dla przykładu); jeśli nie, ustawiasz 0 w active.


--------------------

Griwes' Homepage | eWorld | Moje wypociny | LastFM Profile
Go to the top of the page
+Quote Post
maxil
post 16.02.2010, 19:14:03
Post #6





Grupa: Zarejestrowani
Postów: 212
Pomógł: 11
Dołączył: 8.11.2008
Skąd: Sieradz

Ostrzeżenie: (10%)
X----


Cytat(griwes @ 16.02.2010, 18:13:30 ) *
Wrzucaj do sesji czas aktywowania (time()). I sprawdzaj, czy time() - tamto > 3 * 60 (3min, dla przykładu); jeśli nie, ustawiasz 0 w active.


w tym wypadku bym musiał ręcznie wywoływać skrypt co jakiś czas a mi chodzi o automat.
crontab nie wchodzi w grę chyba że da się zrobić jakiś żeby sie co jakiś czas na widzie odpalał skrypt.
Go to the top of the page
+Quote Post
griwes
post 16.02.2010, 19:27:47
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 15.02.2009
Skąd: Racibórz/Wrocław

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


Ależ automat. Robisz tak:

1. Sesja się odpala; ustawiasz active = 1 i time = time().
2. Odpalasz UPDATE ... SET active = 0 WHERE time() - time > zadany czas.

Sam tak robię i działa doskonale tongue.gif

edit: trochę pokrętnie napisałem wczesniej tongue.gif

Ten post edytował griwes 16.02.2010, 21:22:44


--------------------

Griwes' Homepage | eWorld | Moje wypociny | LastFM Profile
Go to the top of the page
+Quote Post
maxil
post 17.02.2010, 13:05:04
Post #8





Grupa: Zarejestrowani
Postów: 212
Pomógł: 11
Dołączył: 8.11.2008
Skąd: Sieradz

Ostrzeżenie: (10%)
X----


kożystając z okacji chciałbym sie dowiedziec dlaczego zapytanie sql nie pobiera mi wszystkich danych.
zapytanie wygląda tak:

  1. public static function getById($uid)
  2. {
  3. $u = new User();
  4. $query = sprintf('SELECT * FROM %susers WHERE USER_ID = %d', DB_TBL_PREFIX, $uid);
  5. $result = mysql_query($query, $GLOBALS['DB']);
  6.  
  7. if (mysql_num_rows($result))
  8. {
  9. $row = mysql_fetch_assoc($result);
  10. $u->exists = TRUE;
  11. $u->username = $row['username'];
  12. $u->password = $row['password'];
  13. $u->position = $row['position'];
  14. $u->email = $row['email'];
  15. $u->banned = $row['banned'];
  16. $u->gg = $row['gadugadu'];
  17. $u->pseudo = $row['pseudo'];
  18. $u->uid = $uid;
  19. }
  20.  
  21. return $u;
  22. }


tabela w mysql

  1. CREATE TABLE `panel_users` (
  2. `user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `username` varchar(20) collate latin1_general_cs NOT NULL,
  4. `password` char(40) collate latin1_general_cs NOT NULL,
  5. `position` varchar(5) collate latin1_general_cs NOT NULL,
  6. `gadugadu` varchar(30) collate latin1_general_cs NOT NULL,
  7. `email` varchar(100) collate latin1_general_cs NOT NULL,
  8. `sadmin` tinyint(1) NOT NULL DEFAULT '0',
  9. `pseudo` varchar(255) collate latin1_general_cs NOT NULL,
  10. `banned` tinyint(1) NOT NULL DEFAULT '0',
  11. PRIMARY KEY (`user_id`)
  12. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs AUTO_INCREMENT=3 ;


bez problemu pobiera mi: user_id, username, password, position, email, banned
nie chce tylko pobrać: gadugadu, pseudo, sadmin

i nie mam zielonego pojęcia dlaczego, męcze się z tym od wczoraj może wy znajdziecie jakiś mały błąd.

!~odświerzam~!

Ten post edytował maxil 17.02.2010, 11:58:17
Go to the top of the page
+Quote Post
Pilsener
post 17.02.2010, 23:45:45
Post #9





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Co to znaczy, "nie chce pobrać"? Może po prostu nie ma tam danych?
Go to the top of the page
+Quote Post
iVorIus
post 17.02.2010, 23:55:00
Post #10





Grupa: Zarejestrowani
Postów: 145
Pomógł: 18
Dołączył: 11.11.2008
Skąd: Pwo

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


Cytat(maxil @ 16.02.2010, 19:14:03 ) *
w tym wypadku bym musiał ręcznie wywoływać skrypt co jakiś czas a mi chodzi o automat.
crontab nie wchodzi w grę chyba że da się zrobić jakiś żeby sie co jakiś czas na widzie odpalał skrypt.


Nie. Przed wyświetleniem strony zostaje wykonany zawarty wyżej przykładowy kod, więc wyświetlone zostaną zaktualizowane dane.


--------------------
Chcieć to móc, lecz trudnością jest chcieć, nie móc.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 04:34