我有一个网络应用程序,我使用会话登录。我开始在共享主机上使用此应用程序,因此我决定将会话移动到数据库而不是使用共享文件夹(包含所有安全问题)。
在我的开发服务器上它运行正常,但在我设置的新服务器上,我无法处理会话数据($ _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准备?