DB问题中的会话

时间:2016-01-18 18:04:52

标签: php mysql pdo

我有一个网络应用程序,我使用会话登录。我开始在共享主机上使用此应用程序,因此我决定将会话移动到数据库而不是使用共享文件夹(包含所有安全问题)。

在我的开发服务器上它运行正常,但在我设置的新服务器上,我无法处理会话数据($ _SESSION数组保持为空)。

db具有简单的结构:具有id,访问和数据的会话表;

处理会话的代码如下注意:我知道我仍在使用mysql_ * api并且已弃用这是我移植到的旧代码PDO(所有应用程序都在使用PDO)。

session_set_save_handler('_open','_close','_read','_write','_destroy','_clean');

function _open(){
    global $_sess_db;
    $db_user = 'root';
    $db_pass = 'flipper';
    $db_host = 'localhost';
    if ($_sess_db = mysql_connect($db_host, $db_user, $db_pass)){ return mysql_select_db('jdev_db', $_sess_db); }
    return FALSE;
}

function _close(){
    global $_sess_db;
    return mysql_close($_sess_db);
}

function _read($id){
    global $_sess_db;
    $id = mysql_real_escape_string($id);
    $sql = "SELECT data FROM sessions WHERE id = '$id'";
    if ($result = mysql_query($sql, $_sess_db)){
        if (mysql_num_rows($result)){
            $record = mysql_fetch_assoc($result);
            return $record['data'];
        }
    }
    return '';
}

function _write($id, $data){   
    global $_sess_db;
    $access = time();
    $id = mysql_real_escape_string($id);
    $access = mysql_real_escape_string($access);
    $data = mysql_real_escape_string($data);
    $sql = "REPLACE INTO sessions VALUES ('$id', '$access', '$data')";
    return mysql_query($sql, $_sess_db);
}

function _destroy($id){
    global $_sess_db;
    $id = mysql_real_escape_string($id);
    $sql = "DELETE FROM sessions WHERE  id = '$id'";
    return mysql_query($sql, $_sess_db);
}

function _clean($max){
    global $_sess_db;
    $old = time() - $max;
    $old = mysql_real_escape_string($old);
    $sql = "DELETE FROM sessions WHERE  access < '$old'";
    return mysql_query($sql, $_sess_db);
}

在我加载登录页面的数据库中,它存储一个只有id和access的新记录。当我登录时,它不会写任何东西。 如何替换我认为导致错误的mysql_real_escape_string?使用PDO准备?

0 个答案:

没有答案