Class PDO session

   Class PDO session

 część 2

 

Licencja Creative Commons
class Session userSesionClass.php by Adam Berger is licensed under a Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Unported License.
W oparciu o utwór dostępny pod adresem www.joomla-cms.com.pl

   Na przykładzie klasy sesji pokaże jak chcę przekazywać dane pomiędzy klasami w samym konstruktorze, a nie przez dziedziczenie. Same dziedziczenie jest potrzebną rzeczą, lecz mnie interesuje czy takie połączenie jest szybsze.   Klasę sesji postanowiłem zrobić właśnie w taki sposób. Sama klasa sesji nie powinna być skomplikowana przyjąłem, że powinna składać się z numeru, jakoś zakodowanego np. przez sha1(), plus sprawdzenie poprawności samej sesji i na koniec dla zwiększenia bezpieczeństwa, np. co godzinę zmiana id sesji plus kodowanie danych usera. Zwróćcie uwagę na sam konstruktor tam będę sprawdzał poprawność sesji i nawiązywał połączenie z bazą danych. Oczywiście jak w pierwszej części tak i w drugiej, będę używał biblioteki PDO.

Piszcie co o tym sądzicie czy to aby na pewno szybsze.

userSesionClass.php

 include_once basename('databaseClass.php');
class Session 
      {
             private $sesion_id; // id sesji
             private $isSesion = false; // czy jest sesja
             private $db;      /// przypisanie połączenia z PDO przez konstruktor
             
        public function __construct() 
      { 
            $this->db   = new DBBER();
               ############################ Sprawdź Sesję #####################################
             if($this->sprawdzsesje() == true)
                    {
                      $this->czas_sesji();
                    }else{
                         session_unset();
                    }     
          }
        
          public function przypiszsesje($user)
          {
                       $_SESSION['u_login']        = $this->koduj($user);
                       $_SESSION['session_id']    =  sha1(session_id());
                       $_SESSION['start_sesion'] = date("Y-m-d H:i:s");
                       return;
          } private function sesja()
         {  
                    try{
                        ############### SESJA ###############################
        if($this->idsesion() && isset($_SESSION['u_login']))
                   {
                   $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
 
               $stmt = $this->db->prepare('SELECT u_sesion FROM `'. $this->db->dbprefix().'user` WHERE u_login=:u_login and u_sesion=:u_sesion');
                               $stmt->bindValue(':u_login', $this->dekoduj($_SESSION['u_login']), PDO::PARAM_STR);
                   $stmt->bindValue(':u_sesion', $this->idsesion(), PDO::PARAM_INT);
            $stmt->execute();
                   foreach($stmt as $row)
                 {                 
           if($row['u_sesion'] != 1 && isset($row['u_sesion']))
             {
                 $this->isSesion = true;
                    }else{
                 $this->isSesion = false;
             }
                }
                   }
         
             }catch(PDOException $e){
                     echo 'Połączenie w sesji nie mogło zostać utw.<br />'.$e;
                     $this->isSesion = false;
                  } 
               return $this->isSesion;      
         } 
         
      public function idsesion()
           {
          if(isset($_SESSION['session_id']))
            {
             $this->sesion_id = $_SESSION['session_id'];
            }
               return $this->sesion_id;   
           }
           
      protected function koduj($koduj)
           {
             return base64_encode($koduj);  
           }
      protected function dekoduj($koduj)
           {
             return base64_decode($koduj);  
           }
     public function sprawdzsesje()
          {
             return $this->sesja();
          }
 private function czas_sesji()
         {
           try{
                               $cz        = date($_SESSION['start_sesion']);
                               $basedate  = strtotime($cz);
                               $date1     = strtotime("1 hours", $basedate);
                               $this->czas_za_godzine = date("Y-m-d H:i:s", $date1);
                               
                   if(date("Y-m-d H:i:s") > $this->czas_za_godzine && $this->idsesion() != 1)
                       {
                         $_SESSION['start_sesion'] = date("Y-m-d H:i:s");
                        session_regenerate_id(); 
                    $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
                    $stmt =  $this->db->prepare('UPDATE `'. $this->db->dbprefix().'user` SET u_sesion=:u_sesion, u_online=:u_online, u_zalogowany=:u_zalogowany WHERE u_login=:u_login');
            $stmt->bindValue(':u_online', $_SESSION['start_sesion'], PDO::PARAM_STR);
                    $stmt->bindValue(':u_sesion', $this->idsesion(), PDO::PARAM_INT);
                    $stmt->bindValue(':u_zalogowany', 1, PDO::PARAM_INT);
                    $stmt->bindValue(':u_login', $this->dekoduj($_SESSION['u_login']), PDO::PARAM_STR);
                $stmt->execute();
                    $stmt->closeCursor();  
                         }
           }catch(PDOException $e){
                     echo 'Połączenie w czas sesji nie mogło zostać utw.<br />'.$e;
                    } 
              return;   
         }/* */
 }

Dodaj komentarz


Kod antyspamowy
Odśwież

Używamy cookies i podobnych technologii m.in. w celach: świadczenia usług, reklamy, statystyk. Korzystanie z witryny bez zmiany ustawień Twojej przeglądarki oznacza, że będą one umieszczane w Twoim urządzeniu końcowym. Pamiętaj, że zawsze możesz zmienić te ustawienia. To find out more about the cookies we use and how to delete them, see our privacy policy.

I accept cookies from this site.

EU Cookie Directive Module Information