- ini_set('session.cookie_path', '/');
- ini_set('session.cookie_domain', '.mydomain.com');
- ini_set('session.cookie_lifetime', '1800');
複製代碼2、在php.ini裡設定
session.cookie_path = /
- session.cookie_domain = .mydomain.com
session.cookie_lifetime = 1800
複製代碼3、在php頁面最開始的地方(條件同1)調用函數
- session_set_cookie_params(1800 , '/', '.mydomain.com');
複製代碼這三種方式都是同樣的效果。 這裡我用第一種方法設定,分別在www.mydomain.com和sub.mydomain.com兩個網域名稱來測試。sub1.php
//先訪問的頁面做設定
- ini_set('session.cookie_path', '/');
- ini_set('session.cookie_domain', '.mydomain.com');
- ini_set('session.cookie_lifetime', '1800');
//
- session_set_cookie_params(1800 , '/', '.mydomain.com');
- session_start();
- $_SESSION['sub1'] = 'sub1';
- print_r($_SESSION);
- ?>
複製代碼sub2.php
- session_set_cookie_params(1800 , '/', '.mydomain.com');
- session_start();
- $_SESSION['sub2'] = 'sub2';
- print_r($_SESSION);
- ?>
複製代碼訪問順序:(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頁面上;
- var _frm = document.createElement("iframe");
- _frm.style.display="none";
- _frm.src = "http://bbs.it-home.org/setcookie.php?mycookie=xxxxx";//此處xxx最好編碼
- document.body.appendChild(_frm);
複製代碼2、在B系統的setcookie.php頁面中來擷取A系統中所傳過來的cookie值,並將所擷取到值寫入使用者的cookie中,當然域是自己的了,這樣就簡單的實現了cookie跨域的訪問; 不過這其中有個問題需要注意,就是在IE瀏覽器下這樣操作不能成功,需要在setocokie.php頁面中設定P3P HTTP Header就可以解決了(具體詳細資訊可以參考:http://www.w3.org/P3P/),P3P設定代碼為:
- header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');//ecshop這麼設定的
複製代碼 |