在其他网站 (mercadopago.com) 上完成付款后 PHP 会话被破坏

Posted

技术标签:

【中文标题】在其他网站 (mercadopago.com) 上完成付款后 PHP 会话被破坏【英文标题】:PHP session destroyed after finishing payment on other site (mercadopago.com) 【发布时间】:2021-12-26 23:01:04 【问题描述】:

我有一个使用 mercadopago 付款的网站(类似于 PayPal,来自南美)。

当用户完成付款并被重定向回我的网站时,我会得到一个新的会话 ID,但我无法读取旧的会话 ID,也无法读取之前设置的 cookie。

我的问题是我需要 cookie 或会话值来保持用户登录,如果没有,我需要再次询问用户和密码,而客户端不喜欢这样。

这是我用来设置 cookie 的代码,cmets 解释了我的问题:

<?php 

    session_start();
    include("db-connection.php");
    if(isset($_SESSION["id_alumno"]))
    
     $sid=session_id();
      if(isset($_COOKIE["user_token"]))
      //just for debbuging
      //echo "user_token is a  " . $_COOKIE["user_token"];
     else
      //set cookie and update same value in database
      setcookie("user_token", $sid, time()+2*24*60*60);
      $id_alumno=$_SESSION["id_alumno"];
      $sql="UPDATE `alumno` SET `login_token` = '$sid', `login_creado` = NOW() WHERE `alumno`.`id` = '$id_alumno'";
      $res=mysqli_query($link, $sql); //this connection values are send in a db-connection.php already included.
      
    else
     $cookie_value=$_COOKIE["user_token"]; // here is my problem, I can't access this value, checking cookie information using chrome and the plugin web developer, I get 2 PHPSESSID (old which was used to set cookie with user_token, and also the user token value, and also this new PHPSESSID)
     if(isset($cookie_value))
      $sql="SELECT * FROM alumno where login_token='$cookie_value' and login_token!='no'";
      $res=mysqli_query($link, $sql);
      if($reg=mysqli_fetch_array($res))
      
       //here I can login back the user
      //mysql query
     //if isset cookie value
    
    ?>

【问题讨论】:

【参考方案1】:

您正在使用 session_start() 及其默认选项。一旦您离开您的网站,会话 cookie 就会过期。

试试手册中的example #3:

<?php
// This sends a persistent cookie that lasts a day.
session_start([
    'cookie_lifetime' => 86400,
]);
?>

这会发送一个持续一天的持久性 cookie。

另见:How do I create persistent sessions in PHP?

【讨论】:

@SebastianOcaño 我不太确定你在说什么,但你的代码中的逻辑也有点不对劲。您永远不会设置 $_SESSION["id_alumno"] 值,因此您永远无法设置 user_token cookie。我不知道你对这些东西的意图是什么,所以我无法纠正。 谢谢,我试过了,我发现了问题,在支付网站上创建的重定向链接错误,我使用的是带有 www 的网站。关于重定向和之前的付款流程没有使用 www,所以改变它,它现在运行良好。非常感谢您的回答。 关于$_SESSION["id_alumno"],它是在用户登录成功后设置的,在不同的页面中,这里只是检查是否存在。

以上是关于在其他网站 (mercadopago.com) 上完成付款后 PHP 会话被破坏的主要内容,如果未能解决你的问题,请参考以下文章

如何在其他网站上嵌入 React 组件?

限制 youtube 在其他网站上的嵌入

为啥我的网站在其他浏览器上看起来不太好? [关闭]

我的网站不会在 iPhone 上加载图像,但会在所有其他浏览器、移动设备或桌面设备上加载

服务器搭建网站在其他电脑上打不开

iframe 在具有“下一步”按钮的 wordpress 网站上。我需要自动点击它或其他东西