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

时间:2010-09-02 06:56:53

标签: php zend-framework session

我正在制作一个“模块”,它被包含在另一个不相关的PHP应用程序中。在我的“模块”中,我需要使用会话。但是,我得到'会话已经开始......'例外。我的“模块”所包含的应用程序正在启动会话。如果我无法在此应用程序中禁用会话,我有哪些选择?我想使用Zend_Session,但乍一看它似乎是不可能的。但是,也许有另一种方式?有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

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

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

现在,如果已有活动会话,您可以使用session_write_close结束会话,使用session_name更改会话ID的名称以避免冲突,启动会话并在完成后恢复旧会话:

$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)。

答案 1 :(得分:1)

尝试为您的应用设置自定义“名称”参数。

默认值为PHPSESSID。您可以将其更改为PHPSESSID_MYAPP,以避免与其他应用发生冲突。

答案 2 :(得分:-1)

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

@session_start();