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