如何驗證ajax請求的cookie有效性?

來源:互聯網
上載者:User

瀏覽器中後台發起的一個非同步ajax請求,伺服器做響應時,附帶了cookie資訊,那麼後續對同網域名稱下其他頁面請求時,該cookie是否有效,會一併隨請求提交到web伺服器呢?

自己是對web相關的標準不熟,只知道在普通前台請求時這種cookie會有效,對ajax請求的情況就暫時不確定。但想知道該問題的答案究竟是什麼,去翻閱相關的標準是遠水救近火。本著It's easier to check than to guess的原則,決定先寫段程式來驗證這個問題。相關代碼如下

發起ajax請求的html頁面test.html的代碼為

<script type="text/javascript" src="lib/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
$.get('/api/async', function(result){
    window.location.href=result.url;
}, 'json')
</script>

後台'/api/async'服務程式的代碼為

import web
import json

class async:
    def GET(self):
        web.setcookie('web', 'python')
        return '{"url": "/api/index"}'

class index:
    def GET(self):
        cookies = web.cookies()
        return json.dumps(cookies)
        
routes = (
    '/api/async', 'async',
    '/api/index', 'index'
)

app = web.application(routes, globals(), False)
app.run()

我們用先訪問test.html頁面,在其中觸發非同步ajax訪問'/api/async',如代碼所示,其響應結果有cookie資訊,並且body是json資料,有一個url為'/api/index',test.html在收到響應後就前台跳轉訪問該url,'/api/index'服務響應中會將所有的cookie資訊原樣返回給瀏覽器。

對比'api/index'返回的結果與'/api/async'中設定的cookie,就可以知道前面問題的答案了,實際驗證結果如下圖所示



可以看出,ajax非同步請求'/api/async'的響應中設定的cookie,對後續其他其他前台頁面的請求是有效



Ajax跨域請求COOKIE無法帶上的解決辦法


原生ajax請求方式:

var xhr = new XMLHttpRequest();  
xhr.open("POST", "http://xxxx.com/demo/b/index.php", true);  
xhr.withCredentials = true; //支援跨域發送cookies
xhr.send();

jquery的ajax的post方法請求:

 $.ajax({
               type: "POST",
               url: "http://xxx.com/api/test",
               dataType: 'jsonp',
               xhrFields: {
                      withCredentials: true
              },
            crossDomain: true,

           success:function(){

     },

           error:function(){
    }
})


伺服器端設定:

header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://www.xxx.com");


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.