1

CIセッションクラスを使用するCIアプリケーションがあります。これが私が問題を抱えているプロセスです:

  1. ユーザーがページを読み込む
  2. DBからレコードを取得するためのAjaxリクエスト
  3. そのレコードのIDを使用してuserdata変数を設定し、さまざまなDB処理を実行します
  4. ユーザーがページを更新します
  5. 前のレコードのセッション変数に基づいてDBからレコードを取得するAjaxリクエスト(同じレコードを2回続けて返すことはできません)
  6. userdata変数を新しいレコードのIDに再設定します

などなど。

これは、クロムとFFで完全に機能します。しかし、明らかに私がIEでテストするようになると、機能しません。

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

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

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

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

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

別の投稿で見たように、運がありません。また、セッションストレージにDBを使用してみましたが、それでもうまくいきませんでした。

問題のページは次のとおりです:http://givestream.co.uk/stream

これをクロームまたはFFでロードし、更新するか、[次へ]ボタンを押すと、新しい慈善団体が取得されることがわかります。IEでこれを試してみてください。セッションCookieをクリアしない限り機能しません。

レコードを取得する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;
}
4

4 に答える 4

5

修理済み!

ci_sessionの問題ではなかったようです。

もう少し深く掘り下げて追加しました

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

json応答を実行するコントローラーに、ajaxリクエストが実際にコントローラーに到達しているかどうかを確認し、IEajax取得リクエストが実際にコントローラーに到達しなかったことが判明しました。

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

追加した

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

jsスクリプトとブームのトップに。並べ替え。

助けてくれた@Laurenceiに感謝します!

于 2012-04-25T13:33:14.937 に答える
3

sess_expire_on_close=trueを設定してこれを試してください。私はconfigでこの設定を使って解決しました。

于 2012-09-14T01:24:45.583 に答える
2

$ config ['sess_match_useragent']=FALSE;を設定してみてください。

于 2012-10-25T15:57:15.120 に答える
1

上記のコメントは無視してください。これはCIの問題であり、JSの問題ではありません。

まず、「cookie_domain」が正しく設定されていない場合、特に空白のままになっている場合、IEセッションも失敗する可能性があります。他のすべてのブラウザは引き続き機能しますが、IEは機能しません。

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

第三に-このソリューションを使用してください(私が使用しています-本当にうまく機能します): http : //codeigniter.com/forums/viewthread/170123/(約半分下-WanWizardによって投稿されたMY_Sessionファイル

于 2012-04-24T05:21:33.750 に答える