Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Wykrycie timeout sesji
Thompsoon
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 21.03.2015

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


Witam,

Mam problem.
Potrzebuje wykonać pewne operacje na bazie danych ale dopiero wtedy gdy użytkownik się wyloguje lub zostanie sam wylogowany automatycznie po timeout sesji.
Jeżeli chodzi o tę pierwszą wersje to poradziłem sobie bez problemu.
Niestety nie wiem jak wykryć, że dany użytkownik nie jest już aktywny i że wygasła sesja. Szukałem na różnych forach ale nie znalazłem niczego co pomogłoby mi rozwiązać problem.
Proszę o pomoc, nakierowanie.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Thompsoon
post
Post #2





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 21.03.2015

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


Ale jeżeli ktoś się już nie zaloguje? Coś tam podłubie, niewyloguje się i zamknie przeglądarke
Chyba, że przed jakimolwiek zalogowaniem miałby sprawdzać czy czasy aktywnosci w bazie a nie w przypadku konkretnego usera.
Rozwiązanie nieidealne ale zawsze coś.

W międzyczasie przygotowałem kod. Tzn przerobiłem ten http://php.net/manual/en/function.session-...ave-handler.php

  1.  
  2. class session
  3. {
  4. // session-lifetime
  5. var $lifeTime;
  6. // mysql-handle
  7. var $db_connect;
  8.  
  9. function open($savePath, $sessName)
  10. {
  11. // get session-lifetime
  12. $this->lifeTime = get_cfg_var("session.gc_maxlifetime");
  13. // open database-connection
  14. require "db_connection.php";
  15. // return success
  16. $this->db_connect = $db_connect;
  17.  
  18. return true;
  19. }
  20.  
  21. function close()
  22. {
  23. $this->gc(ini_get('session.gc_maxlifetime'));
  24. // close database-connection
  25. return mysqli_close($this->db_connect);
  26. }
  27.  
  28. function read($sessID)
  29. {
  30. // fetch session-data
  31. $query = "SELECT SessionData AS d FROM Sessions WHERE Id = '$sessID' AND SessionExpires > ".time();
  32.  
  33. $res = mysqli_query($this->db_connect, $query);
  34.  
  35. // return data or an empty string at failure
  36. if($row = mysqli_fetch_assoc($res))
  37. return $row['d'];
  38. return "";
  39. }
  40.  
  41. function write($sessID,$sessData)
  42. {
  43. // new session-expire-time
  44. $newExp = time() + $this->lifeTime;
  45. // is a session with this id in the database?
  46.  
  47. $query = "SELECT * FROM Sessions WHERE Id = '$sessID' ";
  48.  
  49. $res = mysqli_query($this->db_connect, $query);
  50.  
  51. // if yes,
  52. if(mysqli_num_rows($res)) {
  53. // ...update session-data
  54.  
  55. $query = "UPDATE Sessions SET SessionExpires = '$newExp', SessionData = '$sessData' WHERE Id = '$sessID' ";
  56.  
  57. mysqli_query($this->db_connect, $query);
  58.  
  59. // if something happened, return true
  60. if(mysqli_affected_rows($this->db_connect))
  61. return true;
  62. } else {
  63. // if no session-data was found,
  64. // create a new row
  65. $query2 = "INSERT INTO Sessions (Id, SessionExpires, SessionData)
  66. VALUES('$sessID', '$newExp', '$sessData')";
  67.  
  68. mysqli_query($this->db_connect, $query2);
  69.  
  70. // if row was created, return true
  71. if(mysqli_affected_rows($this->db_connect))
  72. return true;
  73. }
  74. // an unknown error occured
  75. return false;
  76. }
  77.  
  78. function destroy($sessID)
  79. {
  80. // delete session-data
  81. $query = "DELETE FROM Sessions WHERE Id = '$sessID' ";
  82.  
  83. mysqli_query($this->db_connect, $query);
  84.  
  85. // if session was deleted, return true,
  86. if(mysql_affected_rows($this->db_connect))
  87. return true;
  88. // ...else return false
  89. return false;
  90. }
  91.  
  92. function gc($sessMaxLifeTime)
  93. {
  94. // delete old sessions
  95. $query = "DELETE FROM Sessions WHERE SessionExpires < ".time();
  96.  
  97. mysqli_query($this->db_connect, $query);
  98.  
  99. // return affected rows
  100. return mysql_affected_rows($this->db_connect);
  101.  
  102. return true;
  103. }
  104.  
  105. }
  106.  
  107. $session = new session();
  108. session_set_save_handler(array(&$session,"open"),
  109. array(&$session,"close"),
  110. array(&$session,"read"),
  111. array(&$session,"write"),
  112. array(&$session,"destroy"),
  113. array(&$session,"gc"));
  114.  
  115.  
  116.  


Ale chyba nie działa tak jakbym chciał.
Zapisuje w polu 'Id' nazwę sesji, aktualizuje 'SessionExpires' w przypadku przeładowania strony ale w momenie gdy np. otworzę stronę na dwóch różnych przeglądarkach to mam tylko jeden wpis w bazie. Tak jakby się zastępował, a przecież gdy nie znajdzie 'Id' sesji to powienien tworzyć nowy.
I widzę też że sesja nie usuwa się z bazy danych.
Go to the top of the page
+Quote Post

Posty w temacie
- Thompsoon   [MySQL][PHP] Wykrycie timeout sesji   13.05.2015, 11:52:22
- - Pyton_000   Robisz sesje na BD, okresowo sprawdzasz tabelę ses...   13.05.2015, 12:00:32
- - Thompsoon   A nie ma takiej możlwiości żeby zrobić to z automa...   13.05.2015, 15:16:30
- - Pyton_000   cron   13.05.2015, 15:58:33
- - Thompsoon   To jedyne rozwiązanie? Dopiero zaczynam przygodę z...   13.05.2015, 16:05:51
- - salfunglandyare   sesja na db - http://php.net/manual/en/function.se...   13.05.2015, 16:14:47
- - rad11   Zrob sobie przy uzytkowniku kolumne ostatni czas a...   13.05.2015, 16:50:40
|- - Thompsoon   Cytat(rad11 @ 13.05.2015, 17:50:40 ) ...   13.05.2015, 17:00:42
- - rad11   Musisz pobrac date ostatniej aktywnosci i porownac...   13.05.2015, 17:08:04
- - Thompsoon   No tak, tylko to musiał bym zrobić nową funkcje i ...   13.05.2015, 17:17:31
- - rad11   No to Ci tlumacze masz do tego ostatnia aktywnosc....   13.05.2015, 17:19:07
- - salfunglandyare   Albo mimo wszystko sesja w db i trigger na before/...   13.05.2015, 17:23:43
|- - Thompsoon   Cytat(salfunglandyare @ 13.05.2015, 18:23...   13.05.2015, 17:51:50
- - rad11   Lepiej aby chlopak zaczal od latwiejszego sposobu ...   13.05.2015, 17:27:01
- - salfunglandyare   Generalnie tak: - sesja zapisywana w bazie przez m...   13.05.2015, 18:06:32
- - Thompsoon   Ok czyli wiem jak to ma działać ale jak się za to ...   13.05.2015, 18:39:36
- - salfunglandyare   http://php.net/manual/en/function.session-...ave-h...   13.05.2015, 18:45:41
- - Thompsoon   Ok. Skopiuje do kodu swojej strony i zobaczę czy d...   13.05.2015, 19:02:08
- - Pyton_000   Skoro chcesz wykonać operacje po wylogowaniu i zak...   14.05.2015, 07:29:05
- - Thompsoon   Ale jeżeli ktoś się już nie zaloguje? Coś tam podł...   14.05.2015, 18:34:23
- - salfunglandyare   A otwierasz sesję za każdym razem? Może otwierasz ...   14.05.2015, 22:07:21
- - Pyton_000   Co do czyszczenia to jest ustawione prawdopodobień...   15.05.2015, 07:29:27


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: 6.10.2025 - 05:28