【问题标题】:Profile page PHP个人资料页面 PHP
【发布时间】:2015-10-08 16:13:39
【问题描述】:

我似乎在从profile.php 上的用户那里获取 ID 时遇到了困难。

profile.phpPHP:

<?php
session_start();
require 'include/connect.php';
if(!$_SESSION['key']){
   header('Location: login.php');
}
$uid = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = '$uid'";
$query = mysql_query($sql);
while($row = mysql_fetch_array($query)){
   $user = $row['username'];
}
?>

如您所见,当您使用获取数据添加到 url 时 (EX:profile.php?id=3) 您访问相应用户的个人资料;但是我想获取用户的 ID 并从数据库中提取他们的信息,以便他们在转到 profile.php 时查看自己的个人资料。(不添加 GET 扩展)

问题:我可以使用什么方法来使用用户的 id # 进行查询?另外,我是否需要为此存储一个会话。

【问题讨论】:

  • 会话“密钥”是否让您识别当前登录的用户?
  • 不,它只代表用户是否实际登录。因此,无论用户是否登录,我都可以相应地更改页面。我是否应该将此会话也作为用户 ID 的标识符?
  • 您可以在会话'key'中添加用户ID,并在该'key'的帮助下查询以查看profile.php
  • 是的,您应该并且请不要运行 while 循环,while 循环意味着您正在获取与 WHERE 子句匹配的所有记录,并且我确定您不想向一个用户显示所有配置文件
  • @shehary 他可能希望其他人能够查看他们的个人资料。这很常见。甚至这个网站也允许这样做。

标签: php mysql


【解决方案1】:

您会希望有人将当前登录的用户保存在会话变量中。最简单的方法是在会话数组中添加一些键,例如用户,其中的值是当前登录的用户。

安全点:

  1. 您使用的 mysql 数据库函数已弃用。看看 PDO(谷歌它,找到 StackOverflow 的答案)。它非常相似,但更安全。特别是,查看使用准备好的语句而不是执行连接参数的字符串。在这种情况下,您很容易受到称为 SQL 注入的攻击(您的搜索会告诉您这是什么!)。 Here 是一个起点。

  2. 在您获取/显示数据给用户之前,您应该确保此人已登录并且首先以适当的用户身份登录。例如,用户不应修改为 URL(即更改 $_GET 变量)然后编辑任何用户的任何配置文件。通常,您希望为用户甚至不应该知道的页面显示 404 页面,并为他们可能知道的页面(例如他们自己的个人资料页面、用户控制中心等)显示 401s/log in 重定向但他们没有登录。

  3. 会话劫持是真实存在的!查看this 了解一些降低风险的策略。很大程度上与正确的配置有关。

祝你好运!

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2014-10-09
    • 2016-06-26
    • 2014-05-10
    • 2015-08-02
    • 1970-01-01
    相关资源
    最近更新 更多