1. 程式人生 > >二級域名跨域session共享, yii2

二級域名跨域session共享, yii2

在專案實施過程中,往往把一個大專案進行分拆成幾個獨立的專案,專案用完全獨立的域名和檔案,可以放到不同的伺服器上的獨立分專案

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值將會出現問題的!