在项目实施过程中,往往把一个大项目进行分拆成几个独立的项目,项目用完全独立的域名和文件,可以放到不同的服务器上的独立分项目
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值将会出现问题的!