You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免地址栏显示用户ID,同时实现用户资料查看功能?

避免地址栏显示用户ID的资料展示实现方案

方法一:用POST请求提交用户ID

GET请求会把参数暴露在地址栏,换成POST就能解决这个问题,具体修改如下:

替换原HTML按钮代码

把原来的按钮+a标签改成内嵌表单,点击按钮就会以POST方式提交ID,不会出现在地址栏:

<form action="view.php" method="post" style="display: inline;">
    <input type="hidden" name="member_id" value="<?php echo $roww['member_id']; ?>">
    <button type="submit">View</button>
</form>

设置display: inline是为了让表单和按钮保持原有布局,不会额外换行占位。

调整view.php的PHP逻辑

注意你原来的代码里,HTML传的是member_id,但PHP里取的是snippet_id,这明显不匹配,先修正这个,同时改成用$_POST获取参数:

if (isset($_POST['member_id'])) {
    $member_id = $_POST['member_id'];

    try {
        // 这里表名请根据实际数据库调整,你原来写的snippets表大概率是笔误,用户资料应该对应members表
        $stmt = $pdo->prepare('SELECT * FROM members WHERE member_id = :id');
        $stmt->execute([':id' => $member_id]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        $count = $stmt->rowCount();
    } catch (PDOException $e) {
        echo 'Error: ' . $e->getMessage();
        exit();
    }
}

方法二:用SESSION存储用户ID

如果不想用表单跳转,可以先把要查看的用户ID存入会话,再跳转到view.php读取:

新增中间处理页(比如go_to_view.php)

先做一个表单提交到中间页:

<form action="go_to_view.php" method="post" style="display: inline;">
    <input type="hidden" name="member_id" value="<?php echo $roww['member_id']; ?>">
    <button type="submit">View</button>
</form>

中间页go_to_view.php的代码

<?php
session_start();
if (isset($_POST['member_id'])) {
    $_SESSION['view_member_id'] = $_POST['member_id'];
    header('Location: view.php');
    exit();
}
?>

修改view.php的代码

session_start();
if (isset($_SESSION['view_member_id'])) {
    $member_id = $_SESSION['view_member_id'];
    // 读取后立即销毁这个会话变量,避免后续误访问
    unset($_SESSION['view_member_id']);

    try {
        $stmt = $pdo->prepare('SELECT * FROM members WHERE member_id = :id');
        $stmt->execute([':id' => $member_id]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        $count = $stmt->rowCount();
    } catch (PDOException $e) {
        echo 'Error: ' . $e->getMessage();
        exit();
    }
}

额外安全提醒

  • 不管用哪种方法,都必须加权限校验:检查当前登录用户是否有权限查看该用户的资料,防止越权访问。
  • 继续保持使用PDO预编译语句,这已经能有效防止SQL注入,别改成直接拼接SQL的写法。

内容的提问来源于stack exchange,提问作者willy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:15:21