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

d-_*_*_-b 1 php session zend-framework

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

谢谢!

Gum*_*mbo 5

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

if (session_id() === '') {
    // no current session
}
Run Code Online (Sandbox Code Playgroud)

现在,如果已经有一个活动会话,您可以结束它session_write_close,更改会话ID的名称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();
Run Code Online (Sandbox Code Playgroud)

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