0

简短:由于某种原因,某些浏览器/计算机未检索到 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)。

我已经解决这个问题两天了,真的不知道该怎么办......

4

1 回答 1

0

当您设置 cookie 时,浏览器会将新请求的标头添加到同一域。

您必须验证 login.php 在 index.php 之前被浏览器调用,而不是在同一个请求中。

  1. login.php - 浏览器不发送 cookie,但接收设置它的请求
  2. index.php - 浏览器发送 cookie

如果在你的 index.php 中你有

<include "login.php">

这绝对行不通。

于 2013-02-27T09:15:12.113 回答