我创建的 ajax 函数不会删除 cookie

The ajax function I created does not delete cookies

我正在尝试在按下“a”后删除 cookie。所以我想到了这样使用 ajax:

<?php 
$logged = false;
if (isset($_COOKIE["psw"]) && isset($_COOKIE["usn"])){
    $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: 'bottlesbeach.eu/ajax.php',
           data:{action:'removecks'},
           success:function(html) {
             alert(html);
           }

      });
    }
    </script>
    
    <?

然后在 ajax.php:

<?php
if($_POST['action'] == 'removecks') {
setcookie("usn", "", time() - 86400 * 30);
setcookie("psw", "", time() - 86400 * 30);
}
?>

但是当我点击“a”(即“注销”,参见 bottlesbeach.eu)时,页面会重新加载但 cookie 不会被删除(我通过点击 cookie 检查 cookie> bootlesbeach.eu> 饼干)。

我的问题是:为什么“usn”和“psw”cookie 没有被删除?

cookies

我的库:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>
<!--sweet alert lib-->
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>

解决方案

这不起作用的原因是您实际上没有在页面中包含 jquery 库。

您可以通过添加以下行来解决此问题...

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js">

...到您页面的头部。

此外,您需要将 ajax 请求中的 url 更改为亲戚 url:

`url: '/ajax.php'

补充说明

页面刷新

虽然以上 有效 删除 cookie。它不会更新页面,例如,它仍然在菜单中显示“注销”,直到您刷新页面。

为了解决这个问题,您应该在 ajax returns...

时刷新页面
window.location.href = "/";

...或者只是将 link 设置为注销 url...

<a href="/logout.php">Log out</a>

...并将其重定向到主页...

header("location: /");

Cookie 内容

您应该永远不要在 cookie 中存储密码等敏感信息,即使您先对其进行加密也是如此。

相反,您应该有第二个 table,link 将用户发送到一个随机生成的长“会话 ID”。然后会话 ID 在 cookie 中来回发送,用户 ID 在数据库中查找。

密码

我不确定您是如何在您的服务器上存储密码的,但是,它们应该始终作为 has 存储,而不是以纯文本形式存储。您可以使用内置的 PHP 函数...

$password = password_hash($_POST["password"], PASSWORD_DEFAULT);

...并以同样的方式验证...

$loggedon = password_verify($_POST["password"], $db_password);

效果

使用效果使网站动态化时应小心。就个人而言,我发现“登录”表单在进入和离开焦点时会扩展和收缩等,这真的很烦人。