首页 > 解决方案 > Post ajax 在 IOS 和 MacOs 设备中不起作用

问题描述

我正在为这个站点开发一个注册系统:bottlesbeach.eu 基本上,当用户注册或登录时,会创建一个 cookie,并且在这个 cookie 中有一个随机生成的字符串,该字符串也将插入到用户的 mysql 数据库中节表。当您单击注销时,cookie 应该被清除,并且 mysql 数据库中的随机字符串(字符串会话 id)应该被清除,这个删除 mysql db 中的 cookie 和会话字符串的操作我使用 Ajax 发布。

Index.php onclick 注销:

     <?php 
    $logged = false;
    if (isset($_COOKIE["sessionid"])){
        $logged = true;
    
        ?> 
        <script>
       console.log("status: Logged");
    var ahr = document.getElementById('ahr');
    ahr.setAttribute('href', '');
    ahr.innerHTML="Log-out";
    ahr.onclick = function remokecookies() {
      $.ajax({
           type: "POST",
           url: '/ajax.php',
           data:{action:'removecks'},
           cache: false,
      });
    }
  window.onload = function() {
    if(!window.location.hash) {
        window.location = window.location + '#logged';
        window.location.reload();
        
    }
}

    
        </script>
        
        <?

(显然我插入了重新加载,否则即使执行了 ajax 函数,按钮文本仍保持为“注销”,因此 cookie 被删除。)

在索引中我创建了一个条件,如果 cookie 存在,则表示您已登录,然后在右上角将有一个注销按钮,其中包含我之前显示的相应 onclick ajax 功能。否则它将被写入登录名并单击它将带您进入登录面板。

Ajax 函数(ajax.php):

    <?php
if($_POST['action'] == 'removecks') {
setcookie("sessionid", "", time() - 86400 * 30);
$hostname="";
  $username="";
  $password="";
  $dbname="";
  $ckvalue = $_COOKIE["sessionid"];
$conn = new mysqli($hostname,$username, $password, $dbname); 
  if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
  ?> <script> console.log("Connection to db failed");</script><?
}
            $query = "UPDATE users SET sessionid = '' WHERE sessionid = '$ckvalue'";           
            $stmt = $conn->prepare($query);
            $stmt->bind_param("s", $sessionid);
            $stmt->execute();  
}

?>

一切似乎都可以在桌面版本中运行,但在移动设备上(仅在苹果设备上),“注销”按钮仍然存在。所以,我假设ajax函数没有执行,cookie没有被清除。有人知道如何帮助我吗?

标签: phpajaxcookies

解决方案


推荐阅读