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

PHP会话无法正常工作可能是因为fb?请帮忙,php,facebook,session,login,Php,Facebook,Session,Login,我有一个关于PHP会话的问题。我使用会话让访问者保持登录状态。我以前用这个做过一个网站,效果非常好。现在我正在制作一个Facebook应用程序 当登录检查用户是否已在数据库中注册时,我注册id。然后我使用: if(session_is_registered("id")) { echo "Logged in"; } 因此,如果在浏览器中显示Logged in,我绝对确定会话已注册。但当我进入下一页,其中有会话_开始;在页面顶部,不再有会话。但是如果我使用会话_destroy;,进入注销页面;,然

我有一个关于PHP会话的问题。我使用会话让访问者保持登录状态。我以前用这个做过一个网站,效果非常好。现在我正在制作一个Facebook应用程序

当登录检查用户是否已在数据库中注册时,我注册id。然后我使用:

if(session_is_registered("id"))
{
echo "Logged in";
}
因此,如果在浏览器中显示Logged in,我绝对确定会话已注册。但当我进入下一页,其中有会话_开始;在页面顶部,不再有会话。但是如果我使用会话_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";
}
之后,检查其是否已注册:

$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";
}
会话\u已注册,与$\u会话的isset相同


因此,我不明白的是,会话注册后为true,而在下一页上为false:除非我在注销页面session\u destroy;后立即登录;。因此,即使我在重新启动会话并再次注册之前销毁了会话,也无济于事。

这里有一个解决方案

如下所示设置会话: 如果isset$\会话['speelid']{ $id\u query=mysql\u query从Tour11\u deelnermes中选择*其中fb\u id='$user'; 而$record=mysql\u fetch\u assoc$id\u查询{ $id=$record['deelnemer_id']; } 如果$id>0{ $\会话['speelid']=$id; } } 检查会话是否设置为如下所示: ifisset$\u会话['speelid']{ 回声英格洛德; } 使现代化 这个问题似乎与>=IE6拒绝接受由php生成的会话cookie有关,当.php文件从不同服务器上的.html文件引用时

.HTML到.PHP会话IE问题 使用会话时 由引用的.php文件中的变量 html或其他文件类型 与服务服务器不同的服务器 php文件:

在这些条件下,IE6或更高版本 静默地拒绝会话cookie 试图创建 通过发票隐式或显式地 会议开始

因此,您的会话 变量将返回空值

据kb女士说,解决办法是 添加一个标题,该标题表示您的远程 .php页面不会从事实上滥用 这一许可已被授予

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

解决方案 解决方案是在页面顶部添加此选项,以设置会话

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

请发布一些真实的代码,因为session\u is\u registeredid不够清晰。也许您需要执行会话\u是否已注册$\u会话[id]?告诉我们session\u is\u registed函数作为参数是什么,它做了什么?@Shef session\u is\u registed是内置的PHP函数,因此不需要解释它是如何工作的:session\u register、session\u unregister和session\u is\u registed不应该再使用了。你是对的,我不知道这个函数,因为我尽量远离地球。这项功能似乎已经完成。所以,现在是我们都习惯远离全局变量的时候了。我还用$\u SESSION['id']和isset……,尝试了整个代码。。。。。。。。但是后来我遇到了同样的问题,所以我尝试了这个带有会话注册的旧版本。因此,使用更新的会话内容没有帮助。尝试过,但也显示登录,但在下一页上不再有$u会话['id']。除非我在访问注销页面后进入登录页面。好的,让我了解这里发生了什么:1。首先你们进入登录页面,你们登录,上面写着登录,对吗?2.当您导航到另一个页面时,它不会说登录?3.但当你退出并返回登录时,它会显示登录?几乎。3应该是:但当你退出并返回登录时,它会显示“已登录”,如果你转到任何其他页面,你仍然登录。所以解决方案可以是在登录前将用户重定向到注销页面,但这当然不是一个真正的解决方案…嗯。。。闻起来像是一个非www的问题。如果您有权访问.htaccess,请尝试使用或不使用www强制访问该网站。也就是说,如果用户尝试登录到http://site.com/login.php 在您检查凭据并将其转发给http://www.site.com/logged.php 带标题。尝试.htaccess技巧,或者尝试将会话域从.domain.com设置为domain.com。我自己正在用www-everywhere进行测试。。。所以这不是问题所在 相对长度单位: