首頁 >web前端 >js教程 >如何解決關於Ajax跨域存取 session不能保存等問題

如何解決關於Ajax跨域存取 session不能保存等問題

一个新手
一个新手原創
2017-09-27 09:59:061914瀏覽


根據瀏覽器的保護規則,跨域的時候我們創建的sessionId是不會被瀏覽器保存下來的,這樣,當我們在進行跨在網域存取的時候,我們的sessionId就不會被保存下來,也就是說,每一次的請求,伺服器就會以為是一個新的人,而不是同一個人,為了解決這樣的辦法,下面這種方法可以解決這種跨域的方法。

在ajax 請求要加組態

    $.ajax({
        url:url,        //加上 xhrFields及crossDomain
        xhrFields: {            //允许带上凭据
            withCredentials: true
        },
        crossDomain: true,        //以上
        success:function(result){
            alert("test");
        },
        error:function(){
        }
    });

關於 withCredentials

withCredentials:
 預設情況下,跨來源請求不提供憑證(cookie、HTTP認證及客戶端SSL證明等)。將withCredentials屬性設為true,可以指定某個請求應該要傳送憑證。如果伺服器接收有憑證的請求,會用下面的HTTP頭部來回應。

「Access-Control-Allow-Credentials: true」

#如果發送的是有憑證的請求,但伺服器的相應中沒有包含上面這個頭部,那麼瀏覽器就不會把對應交給JavaScript(於是,responseText中將會是空字串,status的值為0,而且會呼叫onerror()事件處理程序)。另外,伺服器還可以在Preflight回應中發送這個HTTP頭部,表示允許來源發送帶有憑證的請求。

支援withCredentials屬性的瀏覽器有Firefox 3.5+、Safari 4+和Chrome。 IE10及更早版本都不支援。
同時

注意

在新增基本的允許跨網域回應頭之後
需要加入Access-Allow-Credentials:true
另外由於Google的安全策略
當withCredentials 為true 時
ResponseHeader中的Access-Allow-Origin 不能使用通配符'*'
否則會提示

A wildcard '*' cannot be us

ed in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://url' is therefore not allowed access.

其他瀏覽器待測試

根據瀏覽器的保護規則,跨域的時候我們創建的sessionId是不會被瀏覽器保存下來的,這樣,當我們在進行跨域存取的時候,我們的sessionId就不會被保存下來,也就是說,每一次的請求,伺服器就會以為是一個新的人,而不是同一個人,為了解決這樣的辦法,下面這種方法可以解決這種跨域的辦法。

在ajax 請求要加組態

    $.ajax({
        url:url,        //加上 xhrFields及crossDomain
        xhrFields: {            //允许带上凭据
            withCredentials: true
        },
        crossDomain: true,        //以上
        success:function(result){
            alert("test");
        },
        error:function(){
        }
    });

關於 withCredentials

withCredentials:
 預設情況下,跨來源請求不提供憑證(cookie、HTTP認證及客戶端SSL證明等)。將withCredentials屬性設為true,可以指定某個請求應該要傳送憑證。如果伺服器接收有憑證的請求,會用下面的HTTP頭部來回應。

「Access-Control-Allow-Credentials: true」

#如果發送的是有憑證的請求,但伺服器的相應中沒有包含上面這個頭部,那麼瀏覽器就不會把對應交給JavaScript(於是,responseText中將會是空字串,status的值為0,而且會呼叫onerror()事件處理程序)。另外,伺服器還可以在Preflight回應中發送這個HTTP頭部,表示允許來源發送帶有憑證的請求。

支援withCredentials屬性的瀏覽器有Firefox 3.5+、Safari 4+和Chrome。 IE10及更早版本都不支援。
同時

注意

在新增基本的允許跨網域回應頭之後
需要加入Access-Allow-Credentials:true
另外由於Google的安全策略
當withCredentials 為true 時
ResponseHeader中的Access-Allow-Origin 不能使用通配符'*'
否則會提示

A wildcard '*' cannot be used in the 'Access -Control-Allow-Origin' header when the credentials flag is true. Origin 'http://url' is therefore not allowed access.

其他瀏覽器待測試

#

以上是如何解決關於Ajax跨域存取 session不能保存等問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn