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

如果PHP会话已经启动怎么办?,php,zend-framework,session,Php,Zend Framework,Session,我正在制作一个包含在另一个无关PHP应用程序中的“模块”。在我的“模块”中,我需要使用会话。但是,我得到了“会话已启动…”异常。包含我的“模块”的应用程序正在启动会话。如果我无法禁用此应用程序中的会话,我的选项是什么?我想使用Zend_会话,但乍一看似乎不可能。然而,也许还有另一种方法?有什么想法吗 谢谢 使用PHP的会话实现,一次只能有一个会话。您可以使用检查当前是否存在会话: if (session_id() === '') { // no current session } 现在

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


谢谢

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

if (session_id() === '') {
    // no current session
}
现在,如果已经存在活动会话,则可以使用结束会话,使用更改会话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(try)和/或会话cookie(请参阅)。

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

if (session_id() === '') {
    // no current session
}
现在,如果已经存在活动会话,则可以使用结束会话,使用更改会话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(try)和/或会话cookie(请参阅)。

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

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

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


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

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

@session_start();

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

@session_start();

但是,他仍然必须小心,不要干扰其他应用程序的会话变量@西姆斯:对不起,我不熟悉Zend_Session_名称空间。但是他必须注意不要干扰其他应用程序的会话变量。但是如果我想启动会话,该怎么办:$Session=new Zend_Session_名称空间(“Session”)@西姆斯:对不起,我不熟悉Zend_会话名称空间。@sims它叫
闭嘴操作符
啊,那个东西。我不用那个。而且,这不会有帮助,因为我没有通过session_start()启动会话;但是通过$session=new Zend_session_名称空间(“session”);这并不能解决其他会话的问题,在这种情况下,@operator只是一个坏习惯。它增加了开销,使调试和开发更加困难。@Sims它被称为
闭嘴操作符
Ahh,就是这样。我不用那个。而且,这不会有帮助,因为我没有通过session_start()启动会话;但是通过$session=new Zend_session_名称空间(“session”);这并不能解决其他会话的问题,在这种情况下,@operator只是一个坏习惯。它增加了开销,使调试和开发变得更加困难。好吧,我已经设法在“父级”上禁用会话,但我仍然不知道是否有方法在会话已经启动时使用Zend_会话。我想没有。如果有,我会发回这里。好吧,我已经设法在“父”上禁用会话,但我仍然不知道是否有方法在会话已经启动时使用Zend_会话。我想没有。如果有,我会发回这里。