2012-04-23 18 views
1

私はCIセッションクラスを使用するCIアプリケーションを持っています。 Internet ExplorerのCodeigniterセッションの問題

  • 設定するユーザデータ変数&が行うそのレコードのID、ユーザーがリフレッシュし
  • 様々なDBのものでDBからレコードを取得するために
  • Ajaxリクエスト

    1. ユーザー負荷のページ:ここで私はとのトラブルを抱えているプロセスですページ
    2. 前のレコードのセッション変数に基づいてDBからレコードを取得する要求(同じレコードを2回連続して返すことはできません)
    3. 新しいレコードにuserdata変数を再設定しますさんID

    などなど

    これはChromeとFFで完璧に動作します。しかし、明らかに私がIEでテストするときにはうまくいきません。

    ajax要求が実行され、最初のレコードが取得されます。この時点で、セッション変数が設定されています。ユーザーは更新されますが、同じレコードが残ります。

    セッションクッキーをクリアして新しいレコードをリフレッシュすると、この時点で取得されます。

    私が変更しようとしました:

    $config['sess_cookie_name']  = 'ci_session'; 
    

    $config['sess_cookie_name']  = 'cisession'; 
    

    に私は別のポストが、運で見たと同じように。また、セッションストレージのDBを使用してみましたが、まだ運がない。ここで

    が問題のページです:http://givestream.co.uk/stream

    クロムやFFで読み込み、このいずれかのリフレッシュまたは「次へ」ボタンを押すと、あなたはそれが新しい慈善を取得表示されます。 IEでこれを試してください。セッションクッキーをクリアしないとうまくいきません。

    JS機能レコードを取得する:

    function get_matches(){ 
        var charity; 
        var user_total; 
        jQuery.get("/stream/get_charity/", function(data){ 
    
         charity = data.charity; 
         user_total = charity.user_totals; 
    
         /** CHANGE URL **/ 
    
         if (history.pushState) { 
          window.history.pushState("object or string", "Title", "/stream/"+charity.slug); 
         } 
    
         /*****************/ 
    
         // can user accept? 
         if(charity.can_donate == 0){ 
          // No 
          jQuery('.alert-message').show(); 
         } else{ 
          jQuery('.alert-message').hide(); 
         } 
    
         // Charity Binding 
         jQuery('p#char_modal_description').html(charity.description); 
         jQuery('.char_more_link').attr('id', charity.id); 
         jQuery('h1#char_name').html(charity.char_name); 
         jQuery('h2#char_modal_header').html(charity.char_name); 
         jQuery('p#char_desc').html(charity.description); 
         jQuery('#website').html('<label>Website</label><a href="'+charity.website+'" style="color:#08C;" target="_blank">'+charity.website+'</a>'); 
         jQuery('#char_total').text('\u00A3'+charity.total); 
         jQuery('#donors').html(charity.recent_donors); 
         jQuery('#fans').html(charity.recent_fans); 
    
         if (typeof user_total !== 'undefined') { 
          jQuery('#total_char_month').text('\u00A3'+user_total.total_char_month); 
          jQuery('#total_char_alltime').text('\u00A3'+user_total.total_char_alltime); 
          var has_user_seen_stream_notice = user_total.has_user_seen_stream_notice; 
    
          if(has_user_seen_stream_notice == false){ 
           jQuery('#stream_help').show(); 
          } 
         } else{ 
          jQuery('#total_char_month').text('\u00A3'+0); 
          jQuery('#total_char_alltime').text('\u00A3'+0); 
         } 
    
         /** TWITTER SHARE BUTTON CHANGE URL **/ 
    
         var twitter = '<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://givestream.co.uk/stream/'+charity.slug+'" data-via="givestreamuk" data-hashtags="socialgiving">Tweet</a>'; 
         jQuery('#twitter_share').html(twitter); 
    
         var jstext = '!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");'; 
    
         var script = document.createElement("script"); 
         script.type = "text/javascript"; 
         script.text = jstext; 
         jQuery('#twitter_share').append(script); 
    
         // *************************************// 
    
    
         /** FACEBOOK SHARE WIDGET **/ 
    
          var fb = '<iframe src="//www.facebook.com/plugins/like.php?href=http://givestream.co.uk/stream/'+charity.slug+'&amp;send=false&amp;layout=standard&amp;width=280&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font&amp;height=35&amp;appId=119083868224729" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:280px; height:35px;" allowTransparency="true"></iframe>'; 
          jQuery('#fb_share').html(fb); 
    
    
         // ***********************// 
    
    
         jQuery('#char_website').html(charity.website); 
    
         jQuery('#sectors').html('<label>Tags</label>'+charity.sectors); 
         jQuery('#permalink').val('http://givestre.am/stream/'+charity.slug); 
    
         jQuery('#refresh').activity(false); 
    
         get_charity_gallery(); 
         get_charity_shouts(); 
    
        }, 'json'); 
    
        return; 
    } 
    
  • +1

    CodeIgniterは、PHPフレームワークです。 PHPはサーバーサイドの言語であると見なしますが、これはCodeIgniterに関連するものではありません。代わりに、これはJavaScriptやセッションの問題のようです。 JavaScriptをいくつか見せてください。 – kba

    +0

    ciフォーラムでciセッションの問題をIEで簡単に検索すると、セッションライブラリにいくつかの問題があることがわかります。ほとんどのpplはciセッションの設定を変更することでそれを解決するようです。私はいくつかのjsを入れますが、 – iamjonesy

    答えて

    5

    により投稿MY_Sessionファイル固定!

    これはci_sessionの問題ではありませんでした。

    は、私は少し深く掘って、AJAXリクエストが実際にコントローラに到達したかどうかを確認するためにJSONレスポンスを行うコントローラに

    log_message('info', 'queried!-'.$_SERVER['HTTP_USER_AGENT']); 
    

    を追加し、それは、Ajaxリクエストが実際に行われますIEのいずれも判明しませんそれをコントローラに送ります。

    IEネットワークのインスペクタがget要求を確認したにもかかわらず、キャッシュされたajax応答を実際に使用していたことが分かります。

    私はjsのスクリプトとブームの先頭へ

    jQuery.ajaxSetup ({ 
        // Disable caching of AJAX responses 
        cache: false 
    }); 
    

    を追加しました。並べ替えられました。

    @Laurenceiのおかげで助けてくれました!

    +0

    ありがとう、これはちょうど同じproblで私を助けました私は持っていた。 – Rob

    +0

    あなたが最後に私はいくつかの平和を得ると述べたように時間を設定するためのソリューションを検索した後、うん、 – graumanoz

    1

    は、上記のコメントを無視する - これは、CIの問題ではなく、JSの問題です。

    第1に、「cookie_domain」が正しく設定されていないと、特に空白のままになっていると、IEセッションが失敗することがあります。他のすべてのブラウザは引き続き動作しますが、IEは動作しません。第二に

    - このソリューションを試してみてください。 http://codeigniter.com/forums/viewthread/203821/

    第三 - (私が使用している - 本当にうまく動作します)このソリューションを使用します。 http://codeigniter.com/forums/viewthread/170123/ (下半分の方法について - WanWizard

    +0

    返信いただきありがとうございます。私はすでにcooke_domainセットを持っています。 2番目の解決策からMY_Sessionクラスを追加しようとしましたが、運はありません。そして残念ながら、WanWizardのファイルには壊れたリンクがあるようです:( – iamjonesy

    +0

    家にコピーがあります - 後で家に帰ると病気になります – Laurence

    +0

    ありがとうLaurencei! – iamjonesy

    3

    これを試すには、sess_expire_on_close = trueを設定します。私は設定でこの設定で私を解決しました。

    +0

    これは私の一日を保存しました。 – AliAwwad

    2

    $ config ['sess_match_useragent'] = FALSE;

    関連する問題