我回来的时候我发布了this question。我用AJAX脚本更新了这个问题,该脚本工作了大约1周。基本上我可以使用AJAX脚本中的session_start()
,然后我可以访问我需要的会话变量。
这真的很奇怪,但是我在周末之后进来了,今天早上这个剧本不再适用了。这很简单,在这里:
<?php
session_start();
$ajax_connection = mysql_connect('10.X.X.X',$_SESSION['username'],$_SESSION['password']);
$result_set = array();
while ($result_set[] = mysql_fetch_assoc($results)){
// do nothing
}
echo json_encode($results);
?>
上周这个工作完美无瑕,现在在我的错误日志中,我收到了Undefined index: username
和Undefined index: password
警告。当然,MySQL连接尚未建立。因此,此脚本未与原始连接运行相同的会话。我使用error_log(session_id())
来检查父页面和AJAX脚本的ID,确定它们是不同的。当我重新加载页面并再次尝试时,页面和AJAX脚本的ID分别保持不变,但它们应该是相同的ID,而不是2个不同的ID。
无论如何,在经过一周多的工作之后,有没有人知道为什么这不再适用?
答案 0 :(得分:4)
这是您可以使用的类。这是单身,以确保你只将它实例化一次。使用
进行实例化$db = Db::getInstance();
然后
$db->connect();
这是一种使用Dbase连接的更安全的方法(注意我使用了PDO,但是如果你真的需要继续使用mysql_函数,你仍然可以修改它。)
class Db {
private static $instance = null;
private $db = null;
private $host = '';
private $name = '';
private $username = '';
private $password = '';
private function __construct() {
$this->host = 'yourHost';
$this->name = 'yourDbName';
$this->username = 'yourUserName';
$this->password = 'youPassword';
}
public static function getInstance() {
if(is_null(self::$instance)) {
self::$instance = new Db();
}
return self::$instance;
}
public function connect() {
try {
$this->db = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name, $this->username, $this->password);
} catch(Exception $e) {
throw new Exception('Connection error: either the database is unavailable or connection infos are not valid. Please contact the webmaster.');
}
}
}
答案 1 :(得分:0)
不确定这是否能解决您的问题,但您应该在Ajax中调用的php脚本顶部添加以下内容:
header('Cache-control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
它解决了我用于会话和Ajax的一些问题。