PHP会话可能因fb而无法正常工作?请帮忙

时间:2011-06-12 13:53:51

标签: php facebook session login

我对PHP会话有疑问。我使用一个会话来保持访问者登录。我之前创建了一个网站并且工作完美。现在我正在制作一个Facebook应用程序。

登录时(检查用户是否在数据库中注册),我注册id。之后我使用:

if(session_is_registered("id"))
{
echo "Logged in";
}

因此,如果它在浏览器中显示“已登录”,我绝对确定该会话已注册。但是当我转到下一页(页面顶部有session_start();)时,就没有会话了。但是,如果我转到注销页面(使用session_destroy();),然后继续登录,则会话正确注册。此外,如果我关闭所有浏览器窗口然后登录,它将无法正确注册。

我在注册“id”之前尝试销毁会话,但这也不起作用。

我猜我犯了一个基本错误,所以这里的人应该能够帮助我,而不会浪费很多时间。

请帮帮我。我浪费了几天的时间。 提前谢谢。


更多代码:

会话注册的地方:

$id_query = mysql_query ("
    SELECT * FROM Tour11_deelnemers WHERE fb_id = '$user'");
    while ($record = mysql_fetch_assoc ($id_query))
        {
        $id = $record['deelnemer_id'];
        }
if($id > 0)
{
$speelid = $id;
session_register("speelid");
}

之后检查是否已注册:

if(session_is_registered("speelid"))
{
echo "Ingelogd";
}

session_is_registered()与$ _SESSION的isset()相同。

所以我不明白的是,当session_is_registered()在注册后为true时,在下一页上它再次为假:(除非我在登出页面后立即登录(session_destroy();)。因此,即使我在重新启动它并再次注册之前销毁会话,它也无济于事。

1 个答案:

答案 0 :(得分:0)

这是一个适合您的解决方案。

像这样设置会话:

if(!isset($_SESSION['speelid'])){
   $id_query = mysql_query ("SELECT * FROM Tour11_deelnemers WHERE fb_id = '$user'");
        while ($record = mysql_fetch_assoc ($id_query)){
            $id = $record['deelnemer_id'];
        }
    if($id > 0){
        $_SESSION['speelid'] = $id;
    }
}

检查会话是否设置如下:

if(isset($_SESSION['speelid'])){
    echo "Ingelogd";
}

更新

当从另一台服务器上的.php文件引用.html文件时,似乎问题与> = IE6拒绝接受php生成的会话cookie有关。 / p>

.HTML到.PHP会话IE问题

  

使用会话时   a。引用的.php文件中的变量   a的框架(.html或其他文件类型)   不同的服务器比一个服务   .php:

     

在这些条件下IE6或更高版本   默默拒绝会话cookie   试图创建(或者   隐式或明确地通过invoquing   在session_start())。

     

结果,您的会话   变量将返回一个空值。

     

根据MS kb,解决方法是   添加一个表示您的遥控器的标题   .php页面不会滥用这一事实   该许可已被授予。

     

将此标题放在.php文件上   这将创建/更新会话   你想要的变量:

Here is a full thread on this issue

解决方案

解决方案是在页面的最顶部添加它,这将设置会话。

<?php header('P3P: CP="CAO PSA OUR"'); ?>