2016-07-25 11 views
0

にオーバーライドしました。最終的に、いくつかのセッションデータをデータベースに保存することができました。 新しい問題が発生しました。すべてのデータが保存されたら、ページを読み込むとき。 ページをリロードしてセッションに何か書き込むと、すでにセッションにあるすべてのデータがこの新しいデータに置き換えられます。これは、すべてのデータが新しいデータのために置き換えられていることを意味します。これはsessionorder_idが存在しないときにセッションにorder_idを保存しているので問題が発生しています。カスタムセッションsave_handlerは現在の保存データをデータベース

これは、データをデータベースに書き込むコードです。そしてはい、それはに置き換えていると言います。しかし、これはカスタムハンドラであるため、実際にこのセッションにデータを追加して、すべてを更新することはできません。また、どのように私は新しいデータのために古いデータを交換することができます魔女はすでにセッションに存在しています。

データベースへの書き込みを処理するコード。

function _write($id, $data) { 

     $access = time(); 
     $id = $this->session_db->real_escape_string($id); 
     $access = $this->session_db->real_escape_string($access); 
     $data = $this->session_db->real_escape_string($data); 
     $sql = "REPLACE INTO sessions VALUES ('$id', '$access', '$data')"; 
     return $this->session_db->query($sql); 
    } 

私はそれは常にすべてのデータを持っており、私のような何かをするとき、単一の値でデータを上書きしないようにセッション変数にsession_start()直後にすべてのデータを入れて行うことができるものがあります:

$_SESSION['LAST_ACTIVITY'] = time(); ? 

編集:私は直接session_start(); 後にセッションをエコーし​​ようとすると、また、それは私がエラー与え

Warning: session_start(): Failed to decode session object. Session has been destroyed in /var/www/vhosts/url/httpdocs/index.php on line 13 

シリアライズされた文字列に何か問題がありますか?なぜこのエラーが出るのか分かりません。

ご協力いただきありがとうございます。

答えて

0

これですべてが機能しています。私はちょっと問題が何であるか言って恥ずかしく感じます。だから問題と解決策を確認します。

問題は、セッションのシリアライズされたデータが、データベースの通常のテキストフィールドのために長くなることでした。私の文字列は500.000文字を超えていましたデータベース内の通常のテキストフィールドは65.000 +文字までサポートしています。

フィールドを「TEXT」から「LONGTEXT」に変更しました。これで、文字列を保存するのに十分な領域が確保されました。そして、すべてが正しく機能します。

皆さん、今までのお時間をありがとうございます。

関連する問題