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

PHP+React认证系统问题:账号确认跳转及持久化登录异常

PHP Token认证系统的核心问题:邮件确认跳转异常与持久化登录失效

问题1:邮件确认链接被错误重定向到登录页

搭建基于PHP的Token认证系统,用户注册后需通过邮件完成账号确认。点击确认链接本应处理Token并跳转至感谢页,但实际操作中被直接重定向到登录页;除此之外,其他页面也存在同类无理由跳转登录页的问题,尽管已在所有后端PHP页面中调用session_start()。

问题2:持久化登录失效与个人资料更新报错

目前仅在Dashboard页面通过useEffect、sessionStorage结合axios.get获取login.php设置的用户会话,其他页面仅从sessionStorage解析本地存储的用户数据,导致更新个人资料时触发**undefined array key 'user_id'**错误;尝试在所有页面都调用axios.get获取后端会话时,又会被强制重定向回登录页,仿佛从未登录过。虽然已在所有PHP页面开启session_start(),但$_SESSION['user_id']始终未被正确设置,使用isset()进行判断也无法解决该问题。


Dashboard.js代码

function Dashboard() {

const navigate = useNavigate();
const[user, setUser] = useState(null);

useEffect(() => {
      const storedUser = 
JSON.parse(sessionStorage.getItem("user"));
      if(storedUser){
        setUser(storedUser);
      } else {
        axios.get("http://localhost/bachelor_exam/login.php")
        .then((response) => {
          if(response.data.length) {
            const user = {
              user_id: response.data[0].user_id,
              first_name: response.data[0].first_name,
              last_name: response.data[0].last_name,
              email: response.data[0].email,
              company: response.data[0].company,
              phone_number: response.data[0].phone_number,
              verified: response.data[0].verified,
              token: response.data[0].token,
            };
            setUser(user);
            sessionStorage.setItem("user", JSON.stringify(user));
          } else {
            navigate("/login");
          }
        })
        .catch((error) => {
          console.log(error);
          navigate("/login");
        });
      }
    }, [navigate]);

Profile.js代码(其他页面实现示例)

const Profile = () => {

const navigate = useNavigate();
const[user, setUser] = useState(null);

useEffect(() => {
    const storedUser = JSON.parse(sessionStorage.getItem("user"));
    if(storedUser){
        setUser(storedUser);
    } else {
        navigate("/login");
    }

}, [navigate]);

update_profile.php代码(出现user_id未定义问题的文件)

try {
    
    $user_id = $_SESSION["user_id"];
    $updatePassHash = password_hash($changedPassword, PASSWORD_DEFAULT);

    $q = $db->prepare("SELECT * FROM users WHERE email = :email");
    $q->bindValue(":email", $changedEmail);
    $q->execute();
    $rowCheckEmail = $q->fetch();

    if($rowCheckEmail > 0){
        http_response_code(400);
        echo json_encode("The email is already taken");
        exit();

    } else {

       $db->beginTransaction(); 

       //the user changes their first name
       $q = $db->prepare("UPDATE users SET first_name = :first_name WHERE user_id = :user_id");
       $q->bindValue(":user_id", $user_id);
       $q->bindValue(":first_name", $changedFirstName);
       $q->execute();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:55:50