警告:session_destroy():试图用phpCas销毁未初始化的会话


Warning: session_destroy(): Trying to destroy uninitialized session with phpCas

我今天面临phpCas库的问题https://wiki.jasig.org/display/CASC/phpCAS.

问题如下,当我尝试使用一些注销功能时,我收到了消息

Warning: session_destroy(): Trying to destroy uninitialized session

在快速查看了phpCas的库代码后,我设法弄清楚了问题的来源,下面是一个注销函数的片段:

session_write_close();
header('Location: '.$cas_url);
phpCAS::trace("Prepare redirect to : ".$cas_url);
session_unset();
session_destroy();

问题似乎是session_write_close()实际上关闭了会话,然后session_destroy()就不能工作了。

试图将session_write_close()放在评论中,并像一个魅力一样发挥作用,但这导致了两个问题:

  • 问题真的来自那里吗?或者它应该起作用吗?

  • 如果问题真的来自那里,为什么它在那里,却没有人抱怨?认为phpCas是一个被许多人重新使用的库。

听起来你检查了主分支(2af859ff76)-刚刚检查过,它确实有错误。你应该:

  • 查看其中一个发布分支,如1.3表
  • 与作者一起记录此错误

正如手册所建议的"session_write_close--写入会话数据并结束会话",因此您得到了公平的警告。因为会话已经关闭。

仅供参考的

您需要session_start();在你摧毁它之前

另外,header("Location…")正在发送header,因此之后无法关闭会话。在关闭会话后进行重定向