Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Session Handler - Zarządzanie zasobami sesji [kwiateek]
itsme
post
Post #1





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




Uwagi, pytania zwiazane zwiazane z artykulem autorstwa kwiateek "Session Handler - Zarządzanie zasobami sesji" prosze pisac w tym temacie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
no_face
post
Post #2





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Widze, ze dosc ciekawa rozmowa byla tutaj prowadzona, lecz raptownie zakonczona, dlatego tez pozwole sobie odgrzac ten tamet, gdyz wydaje mi sie bardzo interesujacy, a pisac kolejnych nie ma sensu.

Po pierwsze sprawa braku usuwania sesji w bazie:
Cytat(Mery @ 9.03.2005, 11:56:38 ) *
U mnie pojawił się taki problem. Nie wiem czy nie mieszam, bo wydaje mi się to dziwne no ale tak jest.

Mianowicie przy kazdym wywołaniu session_start() najpierw wywoływana jest metoda _write, która zapisuje nową datę do bazy, a dopiero później sprawdzane jest czy sesja się nie przedawniła metodą _gc.

Przez to najpierw nadpisywana jest nowa data, wiec sesja nigdy sie nie przedawnia.

Gdy we _write zanim zostanie zupdatowany rekord w baze dodałem wywołanie _close, która wywołuje _gc to wszystko wydaje się działać dobrze.

Czy to jest normalne (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Czy to może wina serwera, że najpierw updatuje, a poźniej sprawdza dopiero czy powinien (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

ps korzystam z wersji z artukułu, nie tej dostosowanej do php5

EDIT: a jeszcze lepiej gdy dodałem wywołanie _gc w metodzie _read, wtedy sprawdza czy sesja nie jest przedawniona zanim jeszcze cokolwiek z niej wczyta.

Ale czy tak nie powinno być normalnie ?

i to jest prawda, w takiej sytuacji u mnie nigdy nie dochodzilo do sytuacji by sesja z bazy zostala usunieta. Dodalem _gc do mtody _read przez co zaczelo usuwac sesje z bazy.

Mysle, ze nie tylko mi sie przydaly odpowiedzi na pytania poruszone przez autora poprzedniego posta:
Cytat(AxZx @ 9.07.2005, 22:47:05 ) *
czy zawsze lepiej stosowac session handler w mysql czy tylko wtedy gdy chce zliczac userow obecnie przebywajacyh na stronie, w konkretnym dziale itd.

czy ten session handler dziala w taki sposob ze user zamyka przegladarke, a nastepnie znowu wlacza i wchodzi na ta sama strone i znowu jest zalogowany?

dlaczego jak w jednym oknie przegladarki jestem zalogowany, otwieram drugie okno przegladarki i tez jestem zalogowany? czy to wina mojego skryptu czy tak ma dzialac session handler na mysql i to jest wlasnie ten czas zycia sesji?

do zliczania klikniec, wejsc na strone, itp, lepiej stosowac session handler czy mozna zwykle sesje w plikach?


Teraz moje problemy. Zaladowanie klasy i zastapienie podstawowych metod dla session, kodem:
  1. <?php
  2. session_set_save_handler (array(&$session, '_open'),
  3. array(&$session, '_close'),
  4. array(&$session, '_read'),
  5. array(&$session, '_write'),
  6. array(&$session, '_destroy'),
  7. array(&$session, '_gc'));
  8. ?>

Powinno odbyc sie tylko raz, na poczatku? U mnie przy zamieszczeniu tego na kazdej stronie pokazuje komunikac dotyczacy, ze nie moge powtornie zdeklarowac klasy.

Kolejne pytanie. Po usunieciu sesji z bazy dostaje nowa o takim samy id przy wlaczonej opcji cookie, tak ma byc?

Z gory dziekuje za wskazowki, ktore z pewnoscia nie tylko mi pomoga.

Pozdrawiam.


Edit


Daje szybka przerobke pod PHP5 i mysqli.


  1. <?php
  2. class Session
  3.  {
  4. var $db_s;
  5. var $session_table; 
  6. var $session_lifetime;
  7.  
  8.  
  9. function __construct($db, $session_table, $session_lifetime = 0) 
  10.  {
  11. $this->db_s = $db;
  12. $this->session_table = $session_table;
  13. $this->session_lifetime = $session_lifetime; 
  14.  }
  15.  
  16. function _open($session_savepath, $session_name) 
  17.  {
  18. return true; 
  19.  }
  20.  
  21. function _close()
  22.  {
  23. $this->_gc($this->session_lifetime);
  24.  
  25. return true;
  26.  } 
  27.  
  28. function _read($session_id) 
  29.  {
  30. $this->_gc($this->session_lifetime);
  31.  
  32. $sql_query = "SELECT session_value FROM " . $this->session_table . " WHERE session_id = '" . $session_id . "'";
  33.  
  34. $result = $this->db_s->query($sql_query);
  35.  
  36. if ($result && $result->num_rows > 0)
  37.  {
  38. $ww = $result->fetch_assoc();
  39. $session_value = $ww['session_value'];
  40.  
  41. return $session_value;
  42.  }
  43. else { return false; } 
  44.  }
  45.  
  46. function _write($session_id, $session_value) 
  47.  {
  48. $session_start = time();
  49. $session_time = time();
  50.  
  51. $sql_query = "INSERT INTO " . $this->session_table . " (session_id, session_start, session_time, session_value) VALUES ('" . $session_id . "', " . $session_start . ", " . $session_time . ", '" . $session_value . "')";
  52. $result = $this->db_s->query($sql_query);
  53.  
  54. if ($result) { return true; }
  55. else
  56.  {
  57. $sql_query = "UPDATE " . $this->session_table . " SET session_time = " . $session_time . ", session_value = '" . $session_value . "' WHERE session_id = '" . $session_id . "'";
  58.  
  59. $result = $this->db_s->query($sql_query); 
  60. if ($result) { return true;}
  61. else { return false; } 
  62.  }
  63.  } 
  64.  
  65. function _destroy($session_id) 
  66.  {
  67. $sql_query = "DELETE FROM " . $this->session_table . " WHERE session_id = '" . $session_id . "'"; 
  68.  
  69. $result = $this->db_s->query($sql_query);
  70.  
  71. if ($result) { return true; }
  72. else { return false; } 
  73.  } 
  74.  
  75. function _gc($session_lifetime) 
  76. {
  77. $session_lifetime = time() - $this->session_lifetime;
  78.  
  79. $sql_query = "DELETE FROM " . $this->session_table . " WHERE session_time < " . $session_lifetime;
  80.  
  81. $result = $this->db_s->query($sql_query);
  82.  
  83. if ($result) { return true; }
  84. else { return false; } 
  85. }
  86.  
  87.  }
  88.  
  89. $session_table = "sessions";
  90. $session_lifetime = 10;
  91.  
  92. $session_go = new Session($db, $session_table, $session_lifetime);
  93.  
  94. session_set_save_handler (array(&$session_go, '_open'),
  95. array(&$session_go, '_close'),
  96. array(&$session_go, '_read'),
  97. array(&$session_go, '_write'),
  98. array(&$session_go, '_destroy'),
  99. array(&$session_go, '_gc'));
  100.  
  101. ?>


Ten post edytował no_face 13.09.2007, 10:29:12
Go to the top of the page
+Quote Post

Posty w temacie
- It's_me   Session Handler - Zarządzanie zasobami sesji [kwiateek]   22.03.2004, 20:41:21
- - Ive   artykuł ciekawy ale wkurzają mnie te przykłady! bo...   22.03.2004, 21:03:32
- - Siner   Takie cos mnie zaistaresowało. Cytat....Tzn. że me...   23.03.2004, 08:03:53
- - It's_me   nie sadze aby ktos powiedzial ze sie czepiasz wlas...   23.03.2004, 08:06:09
- - wojtek   To moze i ja dodam klilka bledow, ktory znalazlem ...   23.03.2004, 17:37:07
- - kwiateek   Czytałem swój tekst przynajmniej kilkanaście razy ...   23.03.2004, 19:11:57
- - shima   Sugeruję użyć narzędzi do sprawdzania pisowni. Jes...   23.03.2004, 19:31:09
- - scanner   Artykuł został zaktualizowany. Poprawiono wszystki...   23.03.2004, 19:56:04
- - KirkoR   Dopiero zaczynam zabawę z programowaniem obiektowy...   10.04.2004, 16:26:06
- - kwiateek   CytatPierwsze: dlaczego sesje po wygaśnięciu nie z...   12.04.2004, 11:40:19
- - matid   Jakie dyrektywy muszą być ustawione w php.ini aby ...   12.04.2004, 16:28:16
- - kwiateek   CytatJakie dyrektywy muszą być ustawione w php.ini...   13.04.2004, 06:35:02
- - matid   O takich podstawach pamiętam, nie zadawałbym pytan...   19.04.2004, 19:31:24
- - kwiateek   CytatO takich podstawach pamiętam, nie zadawałbym ...   20.04.2004, 20:25:31
- - letus   Witam!. Uruchomiłem ten skrypt u siebie na serwerz...   7.05.2004, 20:27:31
- - matid   CytatPodaj link do tego phpinfa. Nie tyle do sameg...   7.05.2004, 20:38:02
- - kwiateek   CytatWitam!. Uruchomiłem ten skrypt u siebie n...   10.05.2004, 19:12:52
- - hup   zastosowanie klasy opsianej w artukule czas genero...   29.05.2004, 21:11:27
- - kwiateek   Cytat<?php $connect = ... $this->db_config['...   31.05.2004, 06:45:00
- - FastRed   Kod$this->db_config['password'] = $db_...   31.05.2004, 13:25:55
- - hup   komu dziala _gc? skad klasa "wie" jaki jest lifeti...   31.05.2004, 17:10:56
- - kwiateek   Cytatkomu dziala _gc? skad klasa "wie" jaki jest l...   31.05.2004, 20:17:21
- - DeyV   poprawione   31.05.2004, 20:35:47
- - hup   _gc dziala po zmianie: [PHP] pobierz, plaintext ...   31.05.2004, 22:10:59
- - Bartosław   Dzięki wielkie za ten artykuł! Jest super. Ale...   21.08.2004, 22:06:16
- - itsme   Cytat(Bartosław @ 2004-08-21 22:06:16)Dzięki ...   22.08.2004, 07:15:25
- - kwiateek   Cytat(Bartosław @ 2004-08-21 23:06:16)Dzięki ...   23.08.2004, 19:24:16
- - anas   Witam wszystkich Wczoraj naszło mnie żeby przepi...   22.12.2004, 19:41:54
- - Mery   U mnie pojawił się taki problem. Nie wiem czy nie ...   9.03.2005, 12:56:38
- - PUPI   Cytatbool gc ( int session_lifetime ); Funkcja ta...   10.03.2005, 01:05:59
- - Fallout   Witam Zostałem odesłany do tego skryptu, więc go ...   6.05.2005, 03:52:08
- - AxZx   witam dziekuje Kwiatkowi za udostepnie tej klasy ...   9.07.2005, 23:47:05
- - no_face   Widze, ze dosc ciekawa rozmowa byla tutaj prowadzo...   13.09.2007, 10:22:44
- - nospor   zeby tobie bana na manuala dali to mi sie wierzyc ...   20.03.2008, 12:05:20
- - _olo_1984   mam problem z tym session handlerem. Przerobiłem s...   18.07.2008, 08:38:38


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: 21.11.2025 - 22:26