【发布时间】:2013-02-27 17:15:12
【问题描述】:
简短:由于某种原因,某些浏览器/计算机未检索到 cookie '_sid'。 Long:我正在使用 3 个文件。 /index.php、/scripts/login.php 和 /iframes/register.php。 现在,当输入登录信息时,会发生一堆标准的事情,并且用户已登录。设置了一个名为 '_sid' 的 cookie,并将值存储在 mySQL 表中。
登录.php:
setcookie("_sid", $sid, 0, '/'); ?>
现在所有计算机都获得了这个 cookie - 我已经测试了超过 15 台,都通过了。只是想告诉你我是如何设置 cookie 的。
问题出在index.php:
<?php
$username="x"; $password="y"; $database="z";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$loggedin=false; $team="none";
if(isset($_COOKIE['_sid'])){ //error happens here
print_r("test");
$session_id=$_COOKIE['_sid'];
现在错误发生在注释行上。 isset 返回 false。现在通常这将是某种有用的指标。不过……
第三个文件 register.php 赋予用户注册其他人的能力(无关)。需要注意的重要一点是文件 的开头与 index.php 完全相同。
<?php
$username="x"; $password="y"; $database="z";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$loggedin=false; $team="none";
if(isset($_COOKIE['_sid'])){
print_r("test");
$session_id=$_COOKIE['_sid'];
但是,此文件有效。没错,isset 有效。此文件也适用于所有 15/15 计算机。
现在让这一切变得更加混乱,index.php 在 15 台计算机中的大约 10 台上运行。该错误总是发生在 mac(chrome、ff、safari)和 Linux(ff 测试,但也可以假设 chrome)。它适用于大多数窗口(7+8 使用 chrome,ff)。但是,当使用相同的双胞胎计算机(在虚拟操作系统上)时,一台计算机工作,而另一台计算机失败(使用 ff)。
我已经解决这个问题两天了,真的不知道该怎么办......
【问题讨论】:
-
cookie 是只在 login.php 上设置的,还是有另一个文件可以设置 cookie.. 询问原因:cookie 可能是特定于目录的
-
只是出于好奇,不使用 PHP 内置会话处理的原因是什么?
-
当你使用 empty 代替 isset 时,你会遇到同样的问题吗?略有不同,但您可以尝试一下...
-
cookie 仅在 login.php 中设置。我会尝试添加第 5 个参数...我不确定为什么它不存在。我没有使用内置会话,因为最终我将允许用户在浏览器关闭后保持登录状态。
-
也可以在 PHP 内置会话处理中进行持久会话,请参阅 stackoverflow.com/questions/9797913/…