PHP實作跨域的幾種形式
#1、JSONP(JSON with padding)原理
利用html裡面script標籤可以載入其他網域下的js這一特性,使用script src的形式來取得其他網域下的數據,但是,因為是透過標籤引入的, 所以,會將請求到的JSON格式的資料當作js去運行處理,顯然這樣運行是不行的。
因此,就需要提前將返回的資料包裝一下,封裝成函數進行運行處理,函數名稱透過介面傳參的方式傳給後台,後台解析到函數名稱後在原始資料上包裹這個函數名,發送給前端。 (JSONP 需要對應介面的後端的配合才能實現)
實例:
<script>function showData(ret){ console.log(ret); }</script><script src="http://api.jirengu.com/weather.php?callback=showData"></script>
當script src請求到達後端後,後端會去解析callback這個參數,取得到字串showData,在傳送資料後端回傳數據,用showData封裝一下,也就是showData({"json資料"}) ,前端script標籤在載入資料後,會把json資料當作showData的參數,呼叫函數運行。
2、CORS
CORS全名為跨域資源共享(Cross-Origin Resource Sharing
),一種ajax 跨域請求資源的方式,支援現代瀏覽器,IE支援10以上。
實作方式:
當使用XMLHttpRequest
傳送請求時,瀏覽器發現該請求不符合同源策略,會給該請求加一個請求頭:Origin
,後台進行一系列處理,如果確定接受請求,則在返回結果中加入一個回應頭:Access-Control-Allow-Origin
;瀏覽器判斷在該對應頭中,是否包含Origin的值,如果有,則瀏覽器會處理響應,我們就可以拿到響應數據,如果不包含,瀏覽器直接駁回,這時,我們無法拿到響應數據。
實例:
server.js
var http = require('http') var fs = require('fs') var path = require('path') var url = require('url')http.createServer(function(req, res){ var pathObj = url.parse(req.url, true) switch (pathObj.pathname) { case '/getNews': var news = [ "第11日前瞻:中国冲击4金 博尔特再战200米羽球", "正直播柴飚/洪炜出战 男双力争会师决赛", "女排将死磕巴西!郎平安排男陪练模仿对方核心" ] res.setHeader('Access-Control-Allow-Origin','http://localhost:8080') //res.setHeader('Access-Control-Allow-Origin','*') res.end(JSON.stringify(news)) break; default: fs.readFile(path.join(__dirname, pathObj.pathname), function(e, data){ if(e){ res.writeHead(404, 'not found') res.end('<h1 id="nbsp-Not-nbsp-Found">404 Not Found</h1>') }else{ res.end(data) } }) }}).listen(8080)
index.html
<!DOCTYPE html><html><body> <div class="container"> <ul class="news"></ul> <button class="show">show news</button> </div><script> $('.show').addEventListener('click', function(){ var xhr = new XMLHttpRequest() xhr.open('GET', 'http://127.0.0.1:8080/getNews', true) xhr.send() xhr.onload = function(){ appendHtml(JSON.parse(xhr.responseText)) } }) function appendHtml(news){ var html = '' for( var i=0; i<news.length; i++){ html += '<li>' + news[i] + '</li>' } $('.news').innerHTML = html } function $(selector){ return document.querySelector(selector) } </script> </html>
3 、postMessage
假設有兩個網域名稱(主網域網域名稱不一致),其中iframe頁面是允許存取調用,那麼就可以用postMessage實作。
原則:a網域發送請求postMessage,b網域間聽到了message事件,就處理並回傳資料
//b域名<script>window.frames[0].postMessage(this.value, '*'); //*号表示在任何域下都可以接收message window.addEventListener('message', function(e){ console.log(e.data); });</script>
以上內容僅供參考!
推薦教學:PHP影片教學
以上是php跨域的幾種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

絕對會話超時從會話創建時開始計時,閒置會話超時則從用戶無操作時開始計時。絕對會話超時適用於需要嚴格控制會話生命週期的場景,如金融應用;閒置會話超時適合希望用戶長時間保持會話活躍的應用,如社交媒體。

服務器會話失效可以通過以下步驟解決:1.檢查服務器配置,確保會話設置正確。 2.驗證客戶端cookies,確認瀏覽器支持並正確發送。 3.檢查會話存儲服務,如Redis,確保其正常運行。 4.審查應用代碼,確保會話邏輯正確。通過這些步驟,可以有效診斷和修復會話問題,提升用戶體驗。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

設置httponly標誌對會話cookie至關重要,因為它能有效防止XSS攻擊,保護用戶會話信息。具體來說,1)httponly標誌阻止JavaScript訪問cookie,2)在PHP和Flask中可以通過setcookie和make_response設置該標誌,3)儘管不能防範所有攻擊,但應作為整體安全策略的一部分。

phpsessions solvathepromblymaintainingStateAcrossMultipleHttpRequestsbyStoringDataTaNthEserVerAndAssociatingItwithaIniquesestionId.1)他們儲存了AtoredAtaserver side,通常是Infilesordatabases,InseasessessionIdStoreDistordStoredStoredStoredStoredStoredStoredStoreDoreToreTeReTrestaa.2)

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。