Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mechanizm obsługi sesji, Klasa, PHP 5
zbig13
post 1.09.2005, 09:09:19
Post #1





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

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


Witam!
Kilka tygodni temu po raz pierwszy zetknąłem się z OOP, przeglądając posty na forum. Zaciekawiło mnie to, dlatego zacząłem czytać trochę artykułów o programowaniu obiektowym, kupiłem nawet książkę, gdzie są opisane tego podstawy. W końcu udało mi się napisać jakąś klasę (do tej pory uczyłem się teoretycznie tongue.gif). Jest to mechanizm obsługi sesji oparty o bazy danych MySQL. Przedstawiam go poniżej. Chciałbym prosić nie tylko o ocenę, ale też o uwagi na temat co robię źle, co powinenem zmienić, co jest niezgodne z zasadami programowania obiektowego itp. Dzięki temu może nauczę się tworzyć lepsze i bardziej wydajne klasy. Oto kod:

  1. <?php
  2.  
  3. class Sessions {
  4.  
  5. /* Sekcja zmiennych, odpowiadających za połączenie z bazą danych */
  6.  
  7. // Nazwa użytkownika.
  8. private $user = "xxx";
  9.  
  10. // Hasło.
  11. private $pswd = "xxx";
  12.  
  13. // Host (nazwa serwera).
  14. private $host = "localhost";
  15.  
  16. // Nazwa bazy danych.
  17. private $db = "sesje";
  18.  
  19. // Połączenie z bazą danych.
  20. private $connect;
  21.  
  22. /* Zmienne opisujące daną sesję */
  23.  
  24. // Nazwa sesji.
  25. private $name;
  26.  
  27. // Wartość sesji.
  28. private $value;
  29.  
  30. // Czas działania.
  31. private $timeout;
  32.  
  33. // Adrs domeny, w której ma działać sesja.
  34. private $domain;
  35.  
  36.  
  37. /* Funkcja konstrukcjuna, odpowiedzialna
  38. za połączenie z serwerem MySQL. */
  39.  
  40. public function __construct () {
  41. $this->connect = mysql_connect ($this->host, $this->user, $this->pswd) or die ("Nie udało się połączyć z bazą danych. ".mysql_error());
  42. mysql_select_db ($this->db) or die ("Nie udało się wybrać bazy danych. ".mysql_error());
  43. }
  44.  
  45. /* Funkcja inicjująca sesję. */
  46.  
  47. private function init ($name, $value, $timeout, $domain='/') {
  48. $this->name = $name;
  49. $this->value = $value;
  50. $this->timeout = $timeout;
  51. $this->domain = $domain;
  52. return TRUE;
  53. }
  54.  
  55.  
  56. /* Funkcja sprawdzająca istnienie
  57. danej sesji. */
  58.  
  59. private function check ($name) {
  60. $check_query = "SELECT * FROM sessions WHERE name='$name'";
  61. $check = mysql_query ($check_query);
  62. $row = mysql_fetch_array ($check, MYSQL_ASSOC);
  63. if ($row) {
  64. $this->init ($row['name'], $row['value'], $row['timeout'], $row['domain']);
  65.  
  66. // Sprawdzenie, czy dana sesja nie powinna już wygasnąć.
  67. if (time() > $this->timeout) {
  68. $this->destroy ($this->name);
  69. }
  70.  
  71. // Sprawdzenie, czy aktualna ścieżka jest zgodna ze ścieżką działania sesji.
  72. if (strstr(dirname($_SERVER['PHP_SELF']), $this->domain)) {
  73. return TRUE;
  74. } else {
  75. return FALSE;
  76. }
  77.  
  78. } else {
  79. return FALSE;
  80. }
  81. }
  82.  
  83.  
  84. /* Funkcja pozwalająca utworzyć nową sesję. */
  85.  
  86. public function create ($name, $value, $timeout, $domain) {
  87. if (!$this->check ($name)) {
  88. $time = time() + $timeout;
  89. $this->init ($name, $value, $time, $domain);
  90. $create_query = "INSERT INTO sessions (name, value, timeout, domain) VALUES ('$this->name', '$this->value', '$this->timeout', '$this->domain')";
  91. $create = mysql_query ($create_query);
  92. if ($create) {
  93. return TRUE;
  94. } else {
  95. return FALSE;
  96. }
  97. }
  98. }
  99.  
  100. /* Funkcja pozwalająca odczytać już 
  101.    istniejącą sesję. */
  102.  
  103.  public function read ($name) {
  104.  if (!$this->check ($name)) {
  105.  return FALSE;
  106.  } else {
  107.  $sel_query = "SELECT * FROM sessions WHERE name='$name'";
  108.  $sel = mysql_query($sel_query);
  109.  $row = mysql_fetch_array ($sel, MYSQL_ASSOC);
  110. $this->init ($row['name'], $row['value'], $row['timeout'], $row['domain']);
  111. return $this->value;
  112.  }
  113.  }
  114.  
  115.  /* Funkcja niszcząca sesję. */
  116.  
  117. public function destroy ($name) {
  118. $del_query = "DELETE FROM sessions WHERE name='$name'";
  119. $del = mysql_query ($del_query);
  120. return TRUE;
  121. } else {
  122. return FALSE;
  123. }
  124. }
  125.  
  126.  
  127. /* Destruktor, zamyka połączenie
  128. z bazą danych */
  129.  
  130. public function __destruct () {
  131. mysql_close($this->connect);
  132. }
  133.  
  134. }
  135.  
  136. ?>


Przykład użycia:

  1. <?php
  2.  
  3. require_once ('sessions.php');
  4. $session = new Sessions;
  5.  
  6. $session->create ("user", "zbig", 180, "/admin/"); // Tworzy sesję "user" o wartości "zbig", działającą w obrębie katalogu /admin/ przez 3 minuty.
  7. $session->read ("user"); // Odczytuje sesję i zwraca jej wartość (w tym przypadku "zbig").
  8. $session->destroy ("user"); // Niszczy aktualną sesję, zwraca TRUE jeśli usunięcie się powiedzie lub FALSE, je
    śli nie.
  9.  
  10. ?>


Z góry dziękuje i pozdrawiam!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zbig13
post 6.09.2005, 20:40:10
Post #2





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

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


@dr_bonzo Faktycznie, dzięki smile.gif Jak pisałem to mój pierwszy skrypt w OOP, więc przydadzą mi się uwagi na temat poprawności smile.gif jeszcze raz dzięki, zaraz to poprawiam!
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.06.2024 - 14:51