Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] klasa UserSession
Forum PHP.pl > Forum > PHP
dopelganger
cześć
przerobiłem kod klasy UserSession pod sterownik PDO, ale nie działa, tzn sesja tylko jest tworzona, ale nie zapisuje do tabel informacji ...
Może ktoś zerknąć na kod, może wyłapie jakieś usterki :]
dzięki

  1. <?php
  2.  
  3. class UserSession {
  4.  
  5. private $php_session_id;
  6. private $native_session_id;
  7. private $dbhandle;
  8. private $logged_in;
  9. private $user_id;
  10. private $session_timeout = 600; # 10 minut braku aktywności
  11. private $session_lifespan = 3600; # 1 h - ważność sesji
  12.  
  13. public function __construct()
  14. {
  15. global $pdo;
  16. global $db;
  17.  
  18. try
  19. {
  20. $pdo = new PDO('mysql:host='.$db["Host"].';dbname='.$db["Name"], $db["User"], $db["Password"]);
  21. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  22. }
  23. catch(PDOException $error)
  24. {
  25. $error->getMessage();
  26. }
  27.  
  28. array($this, '_session_open_method'),
  29. array($this, '_session_close_method'),
  30. array($this, '_session_read_method'),
  31. array($this, '_session_write_method'),
  32. array($this, '_session_destroy_method'),
  33. array($this, '_session_gc_method')
  34. );
  35.  
  36. $strUserAgent = $GLOBALS["HTTP_USER_AGENT"];
  37. if ($_COOKIE["PHPSESSID"]) {
  38. $this->php_session_id = $_COOKIE["PHPSESSID"];
  39. $stmt = $pdo->query("SELECT id FROM users_session WHERE id_session_ascii='".$this->php_session_id."' AND ((now() - date_start) < '".$this->session_lifespan." seconds') AND user_agent='".$strUserAgent."' AND ((now() - last_action) <= '".$this->session_timeout." seconds' OR last_action IS NULL)");
  40. if ($stmt == 0) {
  41. $failed = 1;
  42. $result = $pdo->exec("DELETE FROM users_session WHERE (id_session_ascii = '".$this->php_session_id."') OR (now()-date_start) > $maxlifetime)");
  43. $result->closeCursor();
  44. $result = $pdo->exec("DELETE FROM users_session_vars WHERE id_session NOT IN (SELECT id FROM users_session)");
  45. $result->closeCursor();
  46. unset($_COOKIE["PHPSESSID"]);
  47. }
  48. }
  49.  
  50. session_set_cookie_params($this->session_lifespan);
  51. }
  52.  
  53. public function IsLoggedIn() {
  54. return($this->logged_in);
  55. }
  56.  
  57. public function GetUserID() {
  58. if ($this->logged_in) {
  59. return($this->user_id);
  60. } else {
  61. return(false);
  62. }
  63. }
  64.  
  65. public function GetUserObject(){
  66. if ($this->logged_in) {
  67. if (class_exists("user")) {
  68. $objUser = new User($this->user_id);
  69. return($objUser);
  70. } else {
  71. return(false);
  72. }
  73. }
  74. }
  75.  
  76. public function GetSessionIdentifier() {
  77. return($this->php_session_id);
  78. }
  79.  
  80. public function Login($strUsername,$strPlainPassword) {
  81. $strMD5Password = md5($strPlainPassword);
  82. $stmt = $pdo->query("SELECT id FROM users WHERE login='$strUsername' AND password='$strMD5Password' LIMIT 1");
  83. if ($stmt->rowCount() > 0) {
  84. $row = $stmt->fetch();
  85. $this->user_id = $row["id"];
  86. $this->logged_in = true;
  87. $result = $pdo->exec("UPDATE users_session SET online=1, id_user='".$this->user_id."' WHERE id='".$native_session_id."'");
  88. $result->closeCursor();
  89. return(true);
  90. } else {
  91. return(false);
  92. }
  93. }
  94.  
  95. public function LogOut() {
  96. if ($this->logged_in == true) {
  97. $result = $pdo->exec("UPDATE users_session SET online=0, id_user=0 WHERE id='".$this->native_session_id."'");
  98. $result->closeCursor();
  99. $this->logged_in = false;
  100. $this->user_id = 0;
  101. return(true);
  102. } else {
  103. return(false);
  104. }
  105. }
  106.  
  107. public function __get($nm) {
  108. $result = $pdo->query("SELECT value_var FROM users_session_vars WHERE id_session='".$this->native_session_id."' AND name_var='".$nm."'");
  109. if ($result->rowCount() > 0) {
  110. $row = $result->fetch();
  111. return(unserialize($row["value_var"]));
  112. } else {
  113. return(false);
  114. }
  115. }
  116.  
  117. public function __set($nm,$val) {
  118. $strSer = serialize($val);
  119. $stmt = $pdo->exec("INSERT INTO users_session_vars(id_session, name_var, value_var) VALUES ('".$this->native_session_id."','".$nm."','".$strSer."')");
  120. $stmt->closeCursor();
  121. }
  122.  
  123. private function _session_open_method($save_path,$session_name) {
  124. # nie robi nic
  125. return(true);
  126. }
  127.  
  128. private function _session_close_method() {
  129. $dbhandle->closeCursor();
  130. return(true);
  131. }
  132.  
  133. private function _session_read_method($id) {
  134. $strUserAgent = $GLOBALS["HTTP_USER_AGENT"];
  135. $this->php_session_id = $id;
  136. $failed = 1;
  137. $result = $pdo->query("SELECT id, online, id_user FROM users_session WHERE id_session_ascii='$id'");
  138. if ($result->rowCount() > 0) {
  139. $row = $result->fetch();
  140. $this->native_session_id = $row["id"];
  141. if ($row["online"] == 1) {
  142. $this->logged_in = true;
  143. $this->user_id = $row["id_user"];
  144. } else {
  145. $this->logged_in = false;
  146. }
  147. } else {
  148. $this->logged_in = false;
  149. $result = $pdo->query("INSERT INTO users_session(id_session_ascii,online,id_user,date_start,user_agent) VALUES ('".$id."','0','0','".now()."','".$strUserAgent."')");
  150. $result->closeCursor();
  151. $result = $pdo->query("SELECT id FROM users_session WHERE id_session_ascci='$id'");
  152. $row = $result->fetch();
  153. $this->native_session_id = $row["id"];
  154. }
  155. return("");
  156. }
  157.  
  158. private function _session_write_method($id,$sess_data) {
  159. return(true);
  160. }
  161.  
  162. private function _session_destroy_method($id) {
  163. $result = $pdo->exec("DELETE FROM users_session WHERE id_session_ascci='$id'");
  164. return($result);
  165. $result->closeCursor();
  166. }
  167.  
  168. private function _session_gc_method($maxlifetime) {
  169. return(true);
  170. }
  171.  
  172. }
  173.  
  174.  
  175. ?>


Wywołanie:

  1. <?php
  2. require_once URL_LOGIN.'class.UserSession.php';
  3. $objSession = new UserSession();
  4.  
  5. $objSession->Login("test","*****");
  6. ?>
  7. Zalogowany: <?=(($objSession->IsLoggedIn() == true) ? "Tak" : "NIE")?> <!-- wyświetla NIE - dla prawidowych danych -->
  8.  
  9. Id zalogowanego usera: <?=$objSession->GetUserID();?>
SmokAnalog
Debuguj wartości po kolei i sprawdzaj co jest źle.

Pytanie, które mi się nasuwa: po co używasz PDO, skoro i tak wstawiasz zapytania "na pałę"? Twój kod jest podatny na ataki SQL Injection.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.