我在我的管理面板中使用了ZFcuser模块。当我登录管理面板时,其返回错误如下:
警告:session_regenerate_id():无法重新生成会话ID - 已在第260行的/home/public_html/dev/vendor/zendframework/zendframework/library/Zend/Session/SessionManager.php中发送的标头
这在我的本地Windows系统中工作正常,但在我的linux托管服务器上运行时会返回这样的警告。
需要帮助才能解决此问题。提前谢谢。
答案 0 :(得分:6)
您可以使用ZF2 SessionManager
:
$manager = new Zend\Session\SessionManager;
$manager->regenerateId();
但是,您的错误可能不是由此函数引起的,而是由于其他原因造成的。仅当您在该段代码之前未使用session_start()
或类似内容时,才可以进行会话管理(echo
或重新生成会话ID):
例如,这将失败:
<?php
echo 'Hello';
session_start();
另一方面,这只会起作用:
<?php
session_start();
echo 'Hello';
你必须非常小心打开和关闭php标签。如果您的类中有任何关闭的php标记,请将其删除。如果此后有空行,则将其解释为在响应中返回的文本,这会导致会话出现问题。这也会失败:
<?php
// Do some work
?>
<!-- blank line -->
<?php
session_start();
?>
所以:检查echo
,print
等所有代码。另外,检查源代码中的任何结束php标记。如果以上所有内容对您没有帮助,请在您重新生成会话ID的位置发布一段代码,这可能会提供更多见解。
答案 1 :(得分:2)
将某些字符转储到PHP标准输出时,通常会出现此错误。这导致将HTTP标头发送到Web浏览器,因此您无法再添加会话标头。
要解决此问题,请确保在开始会话之前没有echo
或printf
任何字符。还要确保您的PHP类文件没有结束?>
标记。如果您的PHP类文件中的?>
标记后面有一些字符,那么这些字符将被转储到stdout,从而破坏您的会话。
答案 2 :(得分:-2)
请检查以下
protected function _initSession() {
$config = array(
'name' => 'session',
'primary' => 'id',
'modifiedColumn' => 'modified',
'dataColumn' => 'data',
'lifetimeColumn' => 'lifetime',
'lifetime' => 60*60*24*30,
);
Zend_Session::setSaveHandler(new F_Session_SaveHandler_DbTable($config));
}