二級域名跨域session共享, yii2
阿新 • • 發佈:2019-01-02
在專案實施過程中,往往把一個大專案進行分拆成幾個獨立的專案,專案用完全獨立的域名和檔案,可以放到不同的伺服器上的獨立分專案
yii2就可以這樣進行
譬如 做一個電子商務系統,
1.產品,分類,首頁使用域名 : www.domain.com
2.賬戶中文使用域名:account.domain.com
3.購物車頁面使用域名:cart.domain.com
4.下單頁面使用域名:checkout.domain.com
分拆成4個域名子專案
這樣就需要在二級域名之間進行session共享同步
在yii2中,本人測試過,可以通過設定
ini_set("session.cookie_domain","intosmile.es");
在兩個專案的index.php新增cookie_domain,就可以進行session共享
兩個完全獨立的yii2是可以使用yii中的session讀取的
注意配置
'request' => [ 'class' => 'common\web\Request', 'enableCookieValidation' => true, 'enableCsrfValidation' => true, 'cookieValidationKey' => 'O1d232trde1x-M97_7QvwPo-5QGdkLMp#@#@', 'noCsrfRoutes' => [ 'catalog/product/addreview', 'favorite/product/remark', 'paypal/ipn/index', 'paypal/ipn', ], ],
'cookieValidationKey' => 'O1d232trde1x-M97_7QvwPo-5QGdkLMp#@#@'
這句,這個cookie需要是一樣的,當然這個,我沒有測試,應該是需要一樣的,如果session不能讀取共享,就設定這裡。這個是cookie生成的key。
這種好處是專案分拆,完全獨立,可以同步進行,很多電商網站都是採取這種方式進行專案的維護。
參考程式碼:
1.利用COOKIE存放session_id();
例項: 域名一檔案php程式碼:<?php session_start(); setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".session.com"); $_SESSION['user_name'] = '梁山良民'; echo $_SESSION['user_name']; ?>
域名二檔案php程式碼:
<?php
session_destroy();
session_id($_COOKIE['session_id']);
session_start();
echo $_SESSION['user_name'];
?>
2.利用php.ini 的session.cookie_domain 備註:這裡是用php程式碼實現不需要修改php.ini的配置檔案;如果有需要你可以在php.ini裡面修改配置檔案(該情況下就不需要改段程式碼:ini_set("session.cookie_domain",'session.com');) 例項: 域名一檔案php程式碼:
<?php
ini_set("session.cookie_domain",'session.com');//注:該引數必須在sesson_start()之上,否則將不會生效
session_start();
$_SESSION['user_name'] = '梁山良民';
echo $_SESSION['user_name'];
?>
域名二檔案php程式碼:
<?php
ini_set("session.cookie_domain",'session.com');
session_start();
echo $_SESSION['user_name'];
?>
後期遇到問題需要特別說明哈,嘿嘿!
第一:ini_set("session.cookie_domain",'session.com');必須放在session_start()之前;
第 二:在某些網站測試的時候必須得注意,或許你本地沒有問題,但是在其他機器上或者伺服器上有問題,那麼你需要檢查 哈,ini_set("session.cookie_domain",'session.com');這個中的session.com中必須與你的域名 進行真實匹配!不然你的部分session值將會出現問題的!