什麼是跨域?(2)

先說session共享的跨域問題,一個域名下都會保持一份會話,跨域就是說從一個域名到另一個域名這個會話還能繼續保持,很常見的就是在一個網站跳到另一個網站還是繼續保持登錄狀態,一般情況下從一個域名下跳到另一個域名下,登錄狀態是會丟失的,如果說沒有丟失,那麼就是進行了跨域處理。

圖片來之互聯網

關於跨域處理有兩個級別的處理:

1.兩個不同的二級域名session共享

這種級別的處理做個簡單的設置就可以了,一句代碼就可以做到會話保持,我以php爲例,假如說你是是個電商網站,一個是母嬰頻道,一個是數碼頻道,他們是兩個不同的二級域名,比如一個是muying.yourdomain.com,一個是dianzi.yourdomain.com,如果不做任何處理的話,從muying.yourdomain.com跳轉到dianzi.yourdomain.com登錄狀態是沒法保持的,要想做到兩個二級域名的跨域就可以去修改php.ini的配置,修改改配置項session.cookie_domain,如果覺得修改配置項嫌麻煩的話,也可以修改php代碼,在自己的php框架裏處理session的地方加上這麼一句就可以了

ini_set("session.cookie_domain",'yourdomain.com');

有了這句代碼之後關於yourdomain.com的所有二級域名的會話都能保持了,不會出現退出登錄現象,就像同一個域名下訪問一樣。

2.兩個不同的域名的session共享

上面說的是同一個域名下的兩個不同二級域名的跨域問題,接下來要說的是兩個完全不一樣的域名的跨域問題,比如說一個域名是abc.com,另一個域名是cde.com,那麼這樣怎麼做到兩個不同的域名實現會話個共享呢?

先說一下原理,就是實現一個session的同步問題,在abc.com的頁面埋一個1像素的圖片去請求一下cde.com並把session_id交給它,同樣在cde.com的頁面也埋一個1像素的圖片去請求abc.com,並把session_id傳給服務器,就這樣實現了2個域名之間的session共享問題

代碼實現如下:

$currentHost = $_SERVER['HTTP_HOST'];$sessid = $_REQUEST['sid'];if(isset($sessid)){session_id($sessid); session_start();if(!isset($_SESSION['all_domains'])){ $_SESSION['all_domains'] = array('abc.com' => false, 'cde.com' => false, ); $_SESSION['all_domains'][$currentHost] = true; } else { $_SESSION['all_domains'][$currentHost] = true; } }else{ session_start(); if(!isset($_SESSION['all_domains'])){$_SESSION['all_domains'] = array( 'abc.com' => false, 'cde.com' => false,); $_SESSION['all_domains'][$currentHost] = true; } else {$_SESSION['all_domains'][$currentHost] = true; } }在其他php文件中都包含以下這樣一句代碼來保證session的同步<?phpforeach($_SESSION['all_domains'] as $domain => $domainset){if(!$domainset){ echo '<img src="http://'.$domain.'/share.php?sid='.session_id().'" width="1" height="1"/>'; }}

3ajax的跨域問題

關於ajax的跨域問題有兩種方式去實現,一種是利用JSONP的原理,這個我就不過多說了,因外網上能搜的到,百度上搜JSONP有一堆,說的很詳細,JSONP的原理,及JSONP的具體實現等等,看了之後一會就學會了,

還有一種方式實現ajax的跨域,那就是在服務端的代碼進行設置,也是一句代碼的事情,就以PHP代碼爲例。在php的http請求框架中加入下面的這句代碼,保證每一個請求能夠執行到就行。

header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods:POST'); //這裏暫且設置請求類型爲post header('Access-Control-Allow-Headers:x-requested-with,content-type');

加了這個代碼之後,就可以實現ajax的跨域問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章