2012-03-26 4 views
1

少し前に私はthis questionを投稿しました。私は約1週間働いたAJAXスクリプトでその質問を更新しました。基本的には、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を確認しましたが、十分に違いがあります。私がページをリロードしてみると、IDはページとAJAXスクリプトでそれぞれ同じままですが、2つのIDでなく同じIDでなければなりません。

とにかく、1週間以上働いた後、これがもううまくいかない理由を知っている人はいますか?

+0

なぜセッション変数にmysql接続情報を格納しますか? –

+0

@ N.B。うまくいくからね。どうすればAJAXスクリプトへの接続情報を得ることができますか? –

+1

db資格情報を保持するファイルをAJAXスクリプトに含めることができないのはなぜですか? 10,000人のユーザーの場合は、同じ情報でセッションを記入します。それは本当に実現可能ではありませんか?それはまた、明らかに、あなたのための問題を生成します。したがって、設計上の決定が悪いことを意味します。私は共有ホスティングなどでどのように安全ではないのかを知ることができますが、私はそうではありません。 –

答えて

4

ここでは、使用できるクラスの種類があります。あなたが一度だけそれをインスタンス化することを確認するのはシングルトンです。その後、

$db = Db::getInstance(); 

$db->connect(); 

これは、私はPDOを使用していることに注意してください(のdBASE接続を使用するには、はるかに安全な方法ですが、あなたが本当に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.'); 
     } 
    } 
} 
0

ない、これはあなたの問題を解決しますが、あなたはアヤックスで呼ばれるPHPスクリプトの先頭にとにかく、次を追加するかどうかを確認します。

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

それはセッションとAjaxを私が持っているために使用するいくつかの問題を解決。

+0

助けてくれてありがとうが、それは問題を解決しませんでした。 –

+0

session_start()の後に追加する必要がありますが、 – Ronan

+0

ああ、同じセッションがまだありません。 –

関連する問題