PHP中的奇怪会话问题

时间:2010-10-01 09:40:15

标签: php session

我在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']);
}

会话未设置,因此如果他们刷新页面或离开并返回,则该消息将不再显示。

基本上问题是当会话未设置时,似乎从脚本的最开始就取消设置,以便不显示消息。 <{1}}语句显然正在运行,因为会话未被设置,但消息未显示。

之前我曾多次使用过这个完全相同的脚本,并且在其他网站上完全可以正常工作(在同一台服务器上,设置完全相同)。

任何帮助/建议都将不胜感激!

5 个答案:

答案 0 :(得分:0)

您是否已初次化会​​话? 在浏览器输出内容之前session_start();

答案 1 :(得分:0)

尝试做session_destroy();而不是取消设置($ _ SESSION); 你能否给我们开始会议的部分以及你将“行动”设置为“已发送”的位置?

答案 2 :(得分:0)

您好Tom确保启动会话的脚本位于同一目录中 - 例如,访问同一会话的命令 - 可以在一个下面是https,一个在http下 或者如果One在/下,则另一个在/ dir1下,并且/ dir1首先运行。会话创建的cookie是/ dir1和更深,所以其他脚本无法读取它;它看不到任何会话,所以它开始一个新的。

我不喜欢这个会议的东西,但它可能值得一试。 - 爸爸

答案 3 :(得分:0)

您拥有的代码是正确的。由于会话未被设置,我们知道if块中的语句正在执行。可能是输出实际上是由echo显示的,但是浏览器没有显示(如果你的css代码配置了这可能会发生这种情况)。因此,只需检查输出页面的来源并检查源是否包含输出消息。

换句话说,您可以在回显中放置一个javascript警告框,看看它是否显示警告框。

echo "<script type='text/javascript'> alert('Hi'); </script>";

这应该覆盖任何隐藏的CSS代码。

答案 4 :(得分:0)

旧线程,但我想补充一点,在这种情况下我更喜欢isset():

<?php
session_start();
if(isset($_SESSION['sent'])){
    echo "Successfully submitted form!";
    $_SESSION = array();
    session_regenerate_id();
    session_unset();
    session_destroy();
    exit;
}
if(isset($_POST['submit'])){
    //validate input & process form
    $_SESSION['sent'] = 1;
    header("location:form.php"); // name of this file
    exit;
}
echo "Enter your email<br />
<form action='' method='post'>
<input type='text' name='email' />
<input type='submit' name='submit' />
</form>";
exit;
?>