php 跨域、跨子域,跨伺服器讀取session的方法介紹

來源:互聯網
上載者:User
  1. ini_set('session.cookie_path', '/');
  2. ini_set('session.cookie_domain', '.mydomain.com');
  3. ini_set('session.cookie_lifetime', '1800');
複製代碼

2、在php.ini裡設定

  1. session.cookie_path = /

  2. session.cookie_domain = .mydomain.com

  3. session.cookie_lifetime = 1800

複製代碼

3、在php頁面最開始的地方(條件同1)調用函數

  1. session_set_cookie_params(1800 , '/', '.mydomain.com');
複製代碼

這三種方式都是同樣的效果。

這裡我用第一種方法設定,分別在www.mydomain.com和sub.mydomain.com兩個網域名稱來測試。sub1.php

  1. //先訪問的頁面做設定

  2. ini_set('session.cookie_path', '/');
  3. ini_set('session.cookie_domain', '.mydomain.com');
  4. ini_set('session.cookie_lifetime', '1800');

  5. //

  6. session_set_cookie_params(1800 , '/', '.mydomain.com');
  7. session_start();
  8. $_SESSION['sub1'] = 'sub1';
  9. print_r($_SESSION);
  10. ?>

複製代碼

sub2.php

  1. session_set_cookie_params(1800 , '/', '.mydomain.com');
  2. session_start();
  3. $_SESSION['sub2'] = 'sub2';
  4. print_r($_SESSION);
  5. ?>
複製代碼

訪問順序:(1)www.mydomain.com/sub1.php頁面輸出:Array ( [sub1] => sub1 )

(2)sub.mydomain.com/sub2.php頁面輸出:Array ( [sub1] => sub1 [sub2] => sub2 )

成功

第二個目標的實現可以使用資料庫來儲存SESSION 資料,這樣各個伺服器就可以方便地訪問同一個資料來源,擷取相同的SESSION 資料了;或者是通過檔案分享權限設定方式,如 NFS 方式(我的其他文章有如何配置nfs)如果用資料庫儲存session資料的話,可能會有遺留問題,就是如果網站的訪問量很大的話,SESSION 的讀寫會頻繁地對資料庫進行操作,可以把這個放在memcache中。存放在資料庫裡的前面有文章實現了。把資料庫和memcache結合的思路,前面有了。如果單獨用memcache存放session不太好,最好和資料庫結合操作。

2)跨域解決思路:用iframe解決,但是ff不支援,所以需要前面加上p3p協議。

P3P(Platform for Privacy Preferences Project),是個協議,通過其聲明它是好人,允許收集瀏覽器使用者行為。可現實中,大家都可以說自己是好人,背地裡沒準兒幹啥壞事呢。這就是其分歧所在。[參考] 國內多數網站,都不關注這個 P3P。隱私問題可能沒國外(微軟的隱私權聲明)重視吧。

首先想到就是通過JS操作Cookie並讓兩個不同域的cookie能夠相互訪問,這樣就可達到了上述的效果。

以下是具體實現過程,分兩個步驟:1、在A系統下成功登入後,利用JS動態建立一個隱藏的iframe,通過iframe的src屬性將A域下的cookie值作為get參數重新導向到B系統下b.jsp頁面上;

  1. var _frm = document.createElement("iframe");
  2. _frm.style.display="none";
  3. _frm.src = "http://bbs.it-home.org/setcookie.php?mycookie=xxxxx";//此處xxx最好編碼
  4. document.body.appendChild(_frm);
複製代碼

2、在B系統的setcookie.php頁面中來擷取A系統中所傳過來的cookie值,並將所擷取到值寫入使用者的cookie中,當然域是自己的了,這樣就簡單的實現了cookie跨域的訪問; 不過這其中有個問題需要注意,就是在IE瀏覽器下這樣操作不能成功,需要在setocokie.php頁面中設定P3P HTTP Header就可以解決了(具體詳細資訊可以參考:http://www.w3.org/P3P/),P3P設定代碼為:

  1. header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');//ecshop這麼設定的
複製代碼
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.