代码之家  ›  专栏  ›  技术社区  ›  d-_-b

如果已经启动了PHP会话怎么办?

  •  1
  • d-_-b  · 技术社区  · 15 年前

    我正在制作一个“模块”,它被包含到另一个不相关的PHP应用程序中。在我的“模块”中,我需要使用会话。但是,我得到了“会话已经启动…”异常。我的“模块”所包含的应用程序正在启动会话。如果我无法禁用此应用程序中的会话,我的选项是什么?我想使用Zend_会话,但乍一看似乎是不可能的。不过,也许还有别的办法?有什么想法吗?

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  5
  •   Gumbo    15 年前

    使用php_s会话实现,一次只能有一个会话。你可以使用 session_id 要检查当前是否有会话:

    if (session_id() === '') {
        // no current session
    }
    

    如果已经有一个活动会话,可以用 session_write_close ,更改会话ID_s name session_name 要避免冲突,请启动会话,完成后还原旧会话:

    $oldName = session_name();
    if (session_id() !== '') {
        session_write_close();
    }
    session_name('APPSID');
    session_start();
    
    // your session stuff …
    
    session_write_close();
    session_name($oldName);
    session_start();
    

    唯一的问题是,PHP的会话实现只将上次启动的会话的会话ID发送回客户端。因此,您需要设置透明会话ID(尝试 output_add_rewrite_var )和/或会话cookie(请参见 setcookie )靠你自己。

        2
  •  1
  •   Alex    15 年前

    尝试为应用程序设置自定义“name”参数。

    默认值为 PHPSESSID . 你可以把它改成 PHPSESSID_MYAPP 以避免与其他应用程序冲突。

        3
  •  -1
  •   Michael Fredrickson    14 年前

    在使用会话功能之前添加以下代码:

    @session_start();