Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Session handler - gc
tabbi
post
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 30.10.2010

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


Witam, czemu po czasie który wyznaczyłem nie usuwaja mi sie rekordy sesji z session handlera?
  1. public function gc($sess_maxlifetime) {
  2.  
  3. $old = (time() - $this->sess_duration);
  4.  
  5. $sql = "DELETE FROM `" . $this->table_name . "` WHERE `access` < " . intval($old) . ";";
  6. $qry = mysql_query($sql);
  7.  
  8. /**
  9.   * You can comment the optimize part, and optimize your tables in an independent way.
  10.   * In fact it's addvised that you do it, especially if you have a hight traffic load.
  11.   */
  12. if (mysql_affected_rows() > 0) { $this->optimize(); }
  13.  
  14. return true;
  15. }


Nawet gdy oznacze sess_duration na 2 sekundy to mi sie nie usuwa.? NIe za bardzo rozumiem czemu to nie działa ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Athlan
post
Post #2





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


$old = (time() - $this->sess_duration);
Tutaj to ma się nijak do $sess_maxlifetime. Dlatego?

Jeżeli to nie pomoże:
Sprawdź też wynik zapytania.
Zdumpuj zapytanie, co zwraca string, spróbuj wykonać go np. w phpMyAdmin.
Przelicz timestampy.
Go to the top of the page
+Quote Post
tabbi
post
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 30.10.2010

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


A kiedy odpala ta metoda za kazdym razem gdy wywolujemy klase new Session ? w kontruktorze klasy mam:

session_set_save_handler
Go to the top of the page
+Quote Post
Athlan
post
Post #4





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Kolega sobie chyba kpiny urządza.

Manual:
session_set_save_handler

Parametr $gc typu callback. Nawet przykład jak tego użyć jest na tacy.
Go to the top of the page
+Quote Post
tabbi
post
Post #5





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 30.10.2010

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


Może jestem głupi ale tego przykładu naprawde nie potrafie znaleźć
Go to the top of the page
+Quote Post
Athlan
post
Post #6





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Kolego, przekleję Ci:
  1. <?php
  2. function open($save_path, $session_name)
  3. {
  4. global $sess_save_path;
  5.  
  6. $sess_save_path = $save_path;
  7. return(true);
  8. }
  9.  
  10. function close()
  11. {
  12. return(true);
  13. }
  14.  
  15. function read($id)
  16. {
  17. global $sess_save_path;
  18.  
  19. $sess_file = "$sess_save_path/sess_$id";
  20. return (string) @file_get_contents($sess_file);
  21. }
  22.  
  23. function write($id, $sess_data)
  24. {
  25. global $sess_save_path;
  26.  
  27. $sess_file = "$sess_save_path/sess_$id";
  28. if ($fp = @fopen($sess_file, "w")) {
  29. $return = fwrite($fp, $sess_data);
  30. fclose($fp);
  31. return $return;
  32. } else {
  33. return(false);
  34. }
  35.  
  36. }
  37.  
  38. function destroy($id)
  39. {
  40. global $sess_save_path;
  41.  
  42. $sess_file = "$sess_save_path/sess_$id";
  43. return(@unlink($sess_file));
  44. }
  45.  
  46. function gc($maxlifetime)
  47. {
  48. global $sess_save_path;
  49.  
  50. foreach (glob("$sess_save_path/sess_*") as $filename) {
  51. if (filemtime($filename) + $maxlifetime < time()) {
  52. @unlink($filename);
  53. }
  54. }
  55. return true;
  56. }
  57.  
  58. session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
  59.  
  60.  
  61. // proceed to use sessions normally
  62.  
  63. ?>


Funkcja gc() jest w session_set_save_handler jako ostatni argument. Pamiętaj, że jest to typ callback, czyli w Twoim przypadku będzie to nie string, a array($instancja_obiektu_sesji, "gc")
Go to the top of the page
+Quote Post
Rid
post
Post #7





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Nie chcę zakładać nowego tematu.Chciałbym się dowiedzieć czym, się różni Session handler od zwykłej SESSION ,druga rzecz jaki jest czas życia takiej sesji-czy również,trwa do zamknięcia przeglądarki???Czytałem na temat tej sesji:
Cytat
Procedura obsługi "zapisz" nie będzie wywołana dopóki strumień wyjściowy jest otwarty. W związku z tym, wyjście instrukcji debugowania zawartych w procedurze "zapisz" nigdy nie będzie widoczne w oknie przeglądarki. Jeśli konieczne jest wyjście debugowania, sugerowane jest zapisanie tego wyjścia do pliku.
O jaki strumień tutaj chodzi???Zaproponowano mi użycie Session handler jako zabezpieczenia typu:jeden użytkownik na jednym koncie-nie chciałbym aby ,w tym samym czasie użytkowało więcej niż jedna osoba.
Go to the top of the page
+Quote Post
Athlan
post
Post #8





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Session handler służy do napisania własnych mechanizmów przetrzymywania sesji. W takim mechaniźmie możesz właśnie uwzględnić swoje warunki początkowe, które napisałeś.

Session handler NICZYM nie różni się od "zwykłej" SESSION, gdyż jest to tylko mechanizm składowania sesji. Domyślny, zaproponowany przez PHP to składownaie plików w odpowiewniej lokalizacji.
Go to the top of the page
+Quote Post
Rid
post
Post #9





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Dziękuję ,myśle że warto będzie się szerzej zainteresować tą funkcją.Chciałbym się także dowiedzieć ,co to za strumień o który ,piszą w manualu.Jaka jest szansa przechwycenia takiej sesji?(IMG:style_emoticons/default/questionmark.gif) ?Używam sesji do podtrzymywania loginu na innych ,podstronach,czy ma sens zabezpieczać sesje przed przechwyceniem inną sesją(IMG:style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
Athlan
post
Post #10





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Szansa przechwycenia jest identyczna, jak w przypadku normalnego rozwiązania. Pamiętaj, że session_handler to tylko system składowania danych sesji, a nie system całej sesji. Otrzymuje on standardowe dane na temat utworzenia, próby zapisu etc.

Strumień natomiast, to nic innego, jak output. save() wykonuje się po tym, jak pehap wyśle do przeglądarki dane. On nie działa w momencie $_SESSION['klucz'] = 'wartosc'; tylko w momencie, kiedy całość się wykona, wypluje do przeglądarki, a przed tym, jak obiekty otrzymują call na destruktory __destruct(), zmienne są niszczone, etc, etc. Chodzi o to, że jak dasz sobie var_dump() na tablicę sesji w save(), nie zostanie ona wyświetlona, bo nie ma gdzie - output już wyslano, jest zamknięty ; ) Zauważ, że jak w dowolnym momencie skryptu dasz sobie echo, var_dump i inne, od razu otrzymasz wynik (przy nie manipulowaniu buforem). Znaczy to, że strumień jest otwarty.
Go to the top of the page
+Quote Post
Rid
post
Post #11





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Dziękuję za szczegółowe wyjaśnienie,z tego co Pan napisał wnioskuję ,że nie ma sensu zabezpieczać sesje poprzez Session handler jak niektórzy mi doradzali.
Go to the top of the page
+Quote Post
Athlan
post
Post #12





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Odnośnie zabezpieczania sesji:
http://phpsec.org/projects/guide/4.html
Go to the top of the page
+Quote Post
Rid
post
Post #13





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Jest Pan "wielki".Właśnie takiego czegoś szukałem:)Dziękuje bardzo ale to bardzo (IMG:style_emoticons/default/snitch.gif)
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: 23.12.2025 - 22:00