zend-framework - Zend session : Common session at multi apps

标签 zend-framework session zend-session

我希望我的子域/域中一项服务的用户可以立即登录到其余服务。

这是我的结构:

  • /图书馆
    • /应用程序1
      • 配置
      • 模块
      • 自举
    • /应用程序2
      • 配置
      • 模块
      • 自举
    • /app3
      • 配置
      • 模块
      • 自举

  • 应用 1:example.com
  • 应用 2:app2.example.com
  • 应用 3:app3.example.com

他们都使用同一个数据库来处理帐户、 session 等。
当有人输入其中一个应用程序并将他的 ip 保存到数据库时,我试图让 Session_Db_Adpater 工作。
然后,当他输入另一个脚本时(在另一个脚本中,ofc.)应该检查他是否有表记录,如果有,脚本应该与那个脚本建立事件 session ,或者他是否不创建新的 session 。


试验 1: 我曾尝试将 session_data 从旧 ID 简单更新为新 ID,但 session_data 拒绝更新,尽管 $db->update() 返回 true。

试验 2 我关闭了 Session_SaveHandler_DbTable 并尝试了这个,因为最后它们在同一个域中:

  Zend_Session::setOptions(array('cookie_domain' => '.example.com'));
    Zend_Session::start();

仍然没有。

试验 3 我使用 Zend_Session::setId();

    $db = Zend_Registry::get('users_db');    
    $test = $db->select()->from('session')->where('ip = ?', $_SERVER['REMOTE_ADDR']);
    $row = $db->fetchRow($test);
    if($row) {            
        Zend_Session::setId($row['session_id']);
    } else {
        Zend_Session::start();
        $db->update('session', array('ip'=>$_SERVER['REMOTE_ADDR']), 'session_id = "'. Zend_Session::getId() .'"');
    }

它工作了 2-5 分钟,然后抛出了这个错误: session 已经开始。必须首先设置 session ID。

我注意到,当我通过例如 app3.example.com 输入时, session 不会将行插入数据库。 适配器工作正常,因为我已经检查了一些测试查询并且它工作正常。

我在 SessionHandler 配置中是这样的:

    $config = array(
        'db' => Zend_Registry::get('users_db') ,  //or alone 'main_db' 

其余的配置是引用中的默认配置。

请帮忙。

最佳答案

您不需要在 Zend 中设置任何内容。只需在您的 php.ini 文件中设置以下内容

; The path for which the cookie is valid.
session.cookie_path = /

; The domain for which the cookie is valid.
session.cookie_domain =

现在子域中的所有应用程序都可以访问从主应用程序创建的相同 SESSION ID,反之亦然。

关于zend-framework - Zend session : Common session at multi apps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6477020/

相关文章:

ASP.Net Session_Start 事件未触发

php - 发送电子邮件时是否需要换行?

php - 在zend框架中调用其他 Controller 的成员函数?

zend-framework - Zend Framework : Flash Messenger, 添加来自模型的消息

javascript - 在 CouchDB 中模拟 session ?

session - 默认 session 过期超时?

zend-framework - 使用 Zend_Session_Handler_DbTable 时的垃圾收集

php - 如果用户闲置 10 分钟,则使 Zend session 过期

php - 如何在 Zend 中获取查询结果