我对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();)。因此,即使我在重新启动它并再次注册之前销毁会话,它也无济于事。
答案 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>
使用会话时 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"'); ?>