解決getJSON跨域登錄Session丟失的問題


最近在做項目中發現,我用下面的代碼異步請求到login.ashx:

var memberUrl = rooturl + 'member.ashx?r=' + Math.random() + '&jsoncallback=?';   //添加jsoncallback參數是為了解決跨域的問題
//驗證是否已經登錄 
$.getJSON(memberUrl, { type: "checklogin" }, function (data) {
    if (data.status == 1) {  //已經登錄成功,顯示用戶信息
        $('#userinfo').html('歡迎您' + data.content + '  ' + successHtml);
    } else {  //登錄失敗
        $('#userinfo').html(waitHtml);
    }
});

第一次請求時登錄成功,但當我刷新頁面時,卻又要再次登錄,經過測試發現:在firefox瀏覽器下是正常的,但在IE下卻每次需要再次登錄,我打印出來sessionId,發現居然刷新后的sessionID已經改變了,需要查找資料終於找到解決辦法:

問題根源:
  IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)協議默認阻止第三方無隱私安全聲明的cookie,Firefox目前還不支持P3P安全特性,firefox中自然也不存 在此問題了。Mircosoft對此的具體描述可以參見 Privacy in Internet Explorer 6

解決辦法是在login.ashx中輸出P3P的主機頭聲明: 給個連接 百度文庫

http://wenku.baidu.com/view/ea504514866fb84ae45c8d2c.html

代碼如下:

public void ProcessRequest(HttpContext context)
{
    string result = string.Empty;
    context.Response.ContentType = "application/Json";

    //業務處理,賦值result......

    //解決IE緩存問題
    context.Response.AddHeader("Cache-Control", "no-cache");
    context.Response.AddHeader("Pragma", "no-cache");

    //解決IE下SessionID丟失的問題
    context.Response.AddHeader("P3P", "CP=CAO PSA OUR"); //解決跨域問題
    string cb = context.Request["jsoncallback"];
    context.Response.Write(cb + "(" + result + ")");
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM