【发布时间】:2010-10-01 09:40:14
【问题描述】:
我在 PHP 中遇到了一个奇怪的会话问题。基本上,当用户提交联系表单时,处理脚本会在完成时设置一个会话 ($_SESSION['action']='sent';)。然后,用户将返回到他们发送表单的页面,并使用以下代码显示一条消息:
$action = $_SESSION['action'];
if ( $action == 'sent' )
{
echo '<p>Thank you for contacting us, we will be in touch with you ASAP.</p>';
unset($_SESSION['action']);
}
会话未设置,因此如果他们刷新页面或离开并返回,消息将不再显示。
基本上,问题是当会话未设置时,它似乎从脚本的最开始就取消设置,因此不会显示消息。 if 语句显然正在运行,因为会话未设置,但消息未显示。
我以前多次使用过这个完全相同的脚本,它在其他网站上运行得非常完美(在同一台服务器上,所有设置都相同)。
任何帮助/建议将不胜感激!
【问题讨论】:
-
该代码没有任何问题,它是另一回事。您是否有任何 301/302/meta/js 重定向可能导致代码执行而不显示?我曾经使用过类似的消息传递机制,这一直是我的绊脚石。
-
此过程中涉及的唯一重定向是将用户从联系人脚本发送回页面的重定向。它是使用代码'header("location:".$page_url);'完成的。页面 URL 变量的设置取决于表单从哪个页面提交,因为它位于网站的多个页面上。
-
脚本中之前某个地方的 session_write_close() 一点也不傻?
-
不,它是一个很小的站点,而这实际上是它唯一处理会话的部分。我已经彻底查看了代码,没有什么可以阻止它的工作。可能与我的 php 设置有关吗?