【问题标题】:Facebook ID properly read by SQL but not by PHP?SQL 正确读取 Facebook ID 但 PHP 无法正确读取 Facebook ID?
【发布时间】:2013-01-04 02:12:06
【问题描述】:

在我网站的登录部分,我试图让用户写一些关于他们自己的信息。我有一个功能性但不安全的登录/注册页面,我试图用一个简单的“使用 facebook 登录”按钮替换它。

问题是,一旦用户使用 facebook 登录,他们可以更新信息,但无法访问。 $uid 变量包含他们唯一的 facebook 用户 ID,SQL 函数正确读取它并将其插入数据库,但所有其他 PHP 函数将其读取为完全不同的数字。 SQL 解码 $uid 而 PHP 回显加密版本?

以下将一条新信息放入正确的 facebook ID 下,然后回显不正确的 facebook ID:

    $sql="INSERT INTO Users (ID, Date, Category, Info)
VALUES
($uid, '$myTime', '$category','$info')";

if (!mysql_query($sql, $con))
  {
  die('Error: ' . mysql_error());
  }
echo "Info Saved<br>";

echo " session: " . $_SESSION['uid'] . " PHP uid: " . $uid . " cookie: " . $_COOKIE['uid'];

我可以判断SQL函数工作正常,因为真实ID存储在数据库中的信息旁边,并且当用户使用非安全表单登录时显示数据。

输出:

 Info Saved
 session: 100005003165914 PHP uid: 100005003165914 cookie: 100005003165914

当我使用不安全的表单登录时会发生这种情况:

 Info Saved
 session: 2147483647 PHP uid: 2147483647 cookie: 2147483647

【问题讨论】:

    标签: php sql facebook encryption


    【解决方案1】:

    从您的代码中不清楚安全形式和非安全形式之间的区别是什么,但我怀疑在某些时候会从数据库中读回 $_SESSION['uid'] 并且 ID 列仅是 INT,它不能存储 100005003165914 但最多 2147483647 - 这恰好是你得到的值。

    【讨论】:

    • 我同意@AndreKR,你能分享相关的数据库架构吗?您可以尝试添加bigintnumeric 类型的facebook_id 字段来处理用户的Facebook 帐户,并在用户之间始终生成您自己的id 字段,无论他们是否使用Facebook 登录。实际查看this question。他们建议使用varchar 来处理 Facebook ID。
    • @AndreKR 你已经搞定了。我怀疑它可能是这样的,但我只是调整了 int 的最大大小而不是更改变量类型。我把它改成Big Int,问题就解决了!这很有趣,因为我为测试该网站而创建的 FB 帐户比我的真实帐户年轻得多,以至于 ID 号很大。这就解释了为什么我的原版使用“登录 w/facebook”功能,而新版则没有!我也会用 varchar 试试!谢谢大家的帮助!
    • 我遇到了同样的问题。但在我的情况下,即使BigInt 也不起作用。以前我使用varchar
    【解决方案2】:

    非安全表单和不安全表单有什么区别?两者听起来都与我相似。 也试试这个答案:Get User Id from Facebook in PHP

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      相关资源
      最近更新 更多