2011-09-20 66 views
0

我有一个在循环中多次调用的页面。我有一个版本,它在页面加载时从MySQL提取数据,在页面重复该过程之前将修改的数据推回给每个提交。其中一些数据仅对会话运行很重要,在会话结束时被抛弃在构造函数和析构函数中读取会话变量的I/O

我玩的是一个类,它从构造函数中的会话变量中加载其变量,然后将最终值退出到析构函数中的相同会话变量。我有以下几条内容。在首次调用构造函数时成功初始化变量,并通过析构函数的第一个实例传出。但是,它们无法在第二次调用构造函数时加载。我错过了什么吗?

在此先感谢

class counters 
{ 
    protected $qCounters; 

    function __construct() 
    { 
    $this->qCounters = $_SESSION['q']['counters']; 
    } 

    // process happen here to alter values 

    function __destruct() 
    { 
    $_SESSION['q']['counters'] = $this->qCounters; 
    } 
} 
+0

我以为你在最好只在这里建模会话,然后添加方法添加到特定的计数器领域,而不是试图建模反击自己。 – prodigitalson

+0

等一下。 。 。您正在循环中多次呼叫一个页面。 。 ?听起来。 。 。可怕。为什么,你为什么这样做? –

+0

为什么那么糟糕?在这种情况下,对于任何具有相同问题的人来说,它对于一个复杂问题 – giles

回答

0

这里是我的[非常简单]会话处理程序。注意db_query()是mysqli_query()的一个简单包装,并在内部处理所有连接细节。

function session_close() { 
    return true; 
} 

function session_die($id) { 
    db_query("DELETE FROM session WHERE ID='$id'"); 
    return true; 
} 

function session_gc($maxlifetime) { 
    return true; 
} 

function session_open($path,$name) { 
    return true; 
} 

function session_read($id) { 
    $dchk = db_query("SELECT data FROM session WHERE ID='$id'"); 
    if(db_numrows($dchk) == 1) { 
    if(!isset($_SESSION['row'])) { $_SESSION['row'] = 1; } 
    list($data) = db_rows($dchk); 
    return base64_decode($data); 
    } else { 
    return ""; 
    } 
    db_free($dchk); 
    return true; 
} 

function session_write($id,$data) { 
    global $visitor; 
    $data = base64_encode($data); 
    if(!isset($_SESSION['row'])) { 
    db_query("INSERT IGNORE INTO session (ID,data,accessed) VALUES('$id','$data',UNIX_TIMESTAMP(NOW()))"); 
    } else { 
    db_query("UPDATE session SET data='$data',accessed=UNIX_TIMESTAMP(NOW()) WHERE ID='$id'"); 
    } 
    return true; 
} 

参考

相关问题