1

我不久前发布了这个问题。我已经用工作了大约 1 周的 AJAX 脚本更新了这个问题。基本上我可以session_start()从 AJAX 脚本中使用,然后我可以访问我需要的会话变​​量。

真的很奇怪,但我是在周末之后进来的,今天早上这个脚本不再起作用了。这很简单,在这里:

<?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: usernameUndefined index: password警告。当然,MySQL 连接没有建立。所以这个脚本没有运行与原始连接相同的会话。我曾经error_log(session_id())检查过父页面和AJAX脚本的ID,果然它们是不同的。当我重新加载页面并再次尝试时,页面和 AJAX 脚本的 ID 分别保持不变,但它们应该是相同的 ID,而不是 2 个不同的 ID。

无论如何,在工作了一个多星期之后,有没有人知道为什么这不再起作用了?

4

2 回答 2

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.');
        }
    }
}
于 2012-03-26T13:30:48.887 回答
0

不确定这是否能解决您的问题,但无论如何您都应该在 Ajax 中调用的 php 脚本的顶部添加以下内容:

header('Cache-control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

它解决了我在使用会话和 Ajax 时遇到的一些问题。

于 2012-03-26T12:35:31.753 回答