Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 18:57   #1
lavrik0000
 
Регистрация: 03.05.2013
Сообщений: 4
По умолчанию session_set_save_handler и ООП в php

Доброе время суток, ребят помогите допиреть в чем косяк.
Решил я заюзать стандартную функцию session_set_save_handler для реализации собственного хранения сессий, решил хранить сессии в бд. Написал класс для оброботки сессий, так же у меня есть класс для работы с бд.
Проблема заключается в следующем в методе write класса сессий напрочь не видит класс бд. Обращение к методу write в классе сессий происходит из функции session_set_save_handler. Он думаем что класс бд не инициализирован. Подскажите как сделать чтобы метод класса сессий все таки его увидел класс бд. Класс бд инициализируется первым.

Вот вырезки из кода

Файлик index.php
PHP код:
require_once 'include/config.php'
 require_once 
'include/class/class.db.php'
 require_once 
'include/session.php'

 
$db = new db($db_host$db_user$db_pass$db_db""); // db($host, $username, $password, $name,$prefix,$p_connect=false,$debug=false) 

 
$handler = new SessionHandler(); 

 
session_set_save_handler( array($handler'open'), 
                     array(
$handler'close'), 
                     array(
$handler'read'), 
                     array(
$handler'write'), 
                     array(
$handler'destroy'), 
                     array(
$handler'gb')); 
                  
                  
 
//Инициируем сессию 
 
session_start(); 



 
//---------------------- Тест работы сессии: --------------------------------- 
   
 
echo '<h1>'.session_id().'</h1>'

 
// Создадим некий инкремент, если он не существовал, 
 // И увеличим его на 1, если он существует: 
 
if( isset($_SESSION['increment']) ) 
 { 
   
$_SESSION['increment']++; 
 } 
 else 
 { 
    
$_SESSION['increment'] = 1
 } 
   
 echo 
'<h1> increment = '.$_SESSION['increment'].'</h1>'
Файлик session.php
PHP код:
<?php 
 
class SessionHandler 
 


    
// Эти функции оставим пустыми... 
    
function open($sess_path$sess_name
    { 
       return 
true
    } 

    function 
close() 
    { 
       return 
true
    } 

    
// Читаем данные 
    
function read($sess_id
    { 
       global 
$db

       
$sql "SELECT `sess_data` FROM `sessions` WHERE `session_id`='".$sess_id."';"
       
$query $db->query($sql); 
       
$num $db->num_rows($query); 
   
       
$current_time time(); 

       
// Если данные получены, нам нужно обновить дату 
       // доступа к данным: 
       
if($num 0
       { 
          
$row $db->fetch_assoc($query); 
           
          
$sql "UPDATE `sessions` SET date_touched='".$current_time."' WHERE session_id='".$sess_id."';"
          
$db->query($sql); 
       
          
// Как мы помним только из этого обработчика 
          // Мы возвращаем данные, а не логическое значение: 
          
return html_entity_decode($row['sess_data']); 
       } 
       else 
       { 
          
$sql "INSERT INTO `sessions` SET session_id='".$sess_id."', date_touched='".$current_time."';"
          
$db->query($sql); 
       
          return 
''
       } 
    } 

    
// Пишем данные: 
    
function write($sess_id$data
    { 
       global 
$db

       
$current_time time(); 
     
       
$sql "UPDATE `sessions` SET `date_touched`='".$current_time."', `sess_data`='".htmlentities($data,ENT_QUOTES)."' WHERE `session_id`= '".$sess_id."';"

       
$db->query($sql); 
     
       return 
true
    }    
     
    
// Уничтожаем данные: 
    
function destroy($sess_id
    { 
       global 
$db
        
       
$sql "DELETE FROM `sessions` WHERE `session_id`='".$sess_id."';"
        
       
$db->query($sql); 
        
       return 
true
    } 

    
// Описываем действия сборщика мусора: 
    
function gb($sess_maxlifetime
    { 
       global 
$db
        
       
$current_time time(); 
        
       
$sql "DELETE FROM `sessions` WHERE date_touched + '".$sess_maxlifetime."' < '".$current_time."';"
        
       
$db->query($sql); 
     
       return 
true
    }    
     
 } 
 
?>
lavrik0000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП + PHP Основы, способы и цели Stroy562 PHP 38 23.01.2015 08:33
Задача ООП на php Gamestop Помощь студентам 3 12.03.2014 14:59
(ООП) Возможно ли взять им предыдущего метода в цепочке методов в php? AlienNation PHP 2 18.08.2012 14:56
ООП в php Arsenx777 PHP 2 06.04.2012 20:20
Видео уроки ООП / PHP pompiduskus PHP 9 28.03.2012 22:43