2个应用之间的Yii2分享会话

时间:2015-09-14 17:56:46

标签: php session yii2

目前,我的申请具有以下结构:

  • 前端
  • 后端(用户通过身份验证)
  • 客户端(用户已通过身份验证)

我要做的是将Flash消息从客户端传递到前端

在客户端应用程序中,我简单设置了闪存:

Yii::$app->session->setFlash('successMessage', 'My success message!');

在前端:

Yii::$app->session->getFlash('successMessage');

但上述情况显然无效。

我已经尝试在两个应用的config / main.php中设置相等的会话ID,但似乎没有什么不同:

'components' => [
    'session' => [
        'name' => '_mySharedSessionId',
        'savePath' => __DIR__ . '/../runtime',  
    ],
    ...
]

我错的任何想法?

更新 问题可能来自于我为每个应用设置了4个不同的虚拟主机:local-frontend,local-backend,local-client。如果我将其恢复为默认值,所有似乎都可以正常工作。所以现在我的问题是: 是否有一种通用的方式来共享上述虚拟主机之间的会话,以便当网站上传生产时它也可以在那里工作(生产中的网址可能是www.mysite.com,www.client.mysite.com ,www.admin.mysite.com)?

3 个答案:

答案 0 :(得分:0)

controller文件中添加以下代码

Yii::$app->session->setFlash('delete', "Member Deleted Successfully.......");

并在viewindex文件

中添加以下代码
<?php if (Yii::$app->session->hasFlash('delete')): ?>
   <div class="alert alert-danger alert-dismissable">
      <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
      <h4><i class="icon fa fa-check"></i>Deleted!</h4>
      <?= Yii::$app->session->getFlash('delete') ?>
   </div>
<?php endif; ?>

答案 1 :(得分:0)

问题出在您的php配置中,而不是特定于Yii2。您应该在php.ini中明确设置session.cookie_domain参数:

session.cookie_domain = ".example.com"

或者,您可以使用ini_set在php中执行此操作(例如,在web/index.php中):

ini_set('session.cookie_domain', '.example.com' );

默认情况下,该变量将Cookie限制为当前域,但将其设置为.example.com(注意点前缀)将允许对example.com,www.example.com,foo.example使用相同的cookie .com,bar.example.com,但不是 example.org。

特别是对于本地安装,请将虚拟主机更改为frontend.localbackend.localclient.local,并将cookie_domain设置为.local

答案 2 :(得分:0)

如果您想在不妨碍应用程序的域配置的情况下将会话从一个应用程序共享到另一个应用程序,那么您应该尝试使用memcache!