【问题标题】:The ajax function I created does not delete cookies我创建的ajax函数不会删除cookies
【发布时间】:2021-06-17 21:32:24
【问题描述】:

一旦按下“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”(即“注销”,请参阅 bottlebeach.eu)时,页面会重新加载,但 cookie 不会被删除(我通过点击 cookies> bootlesbeach.eu> cookies 检查 cookie)。

我的问题是:为什么“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
  • 我已经用我包含的库更新了问题
  • 我查过了,页面上没有 jQuery...
  • 您还需要将网址更改为相对网址url: '/ajax.php'
  • 现在警报出现了,但 cookie 并没有被删除

标签: php ajax cookies session-cookies httpcookie


【解决方案1】:

解决方案

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

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

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

...到页面的顶部。

此外,您需要将 ajax 请求中的 url 更改为相对的 url

`url: '/ajax.php'

附加说明

页面刷新

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

要解决这个问题,您应该在 ajax 返回时刷新页面...

window.location.href = "/";

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

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

...然后将其重定向到主页...

header("location: /");

Cookie 内容

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

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

密码

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

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

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

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

效果

在使用效果使网站动态时,您应该小心。就我个人而言,我觉得“登录”表单在进入和离开焦点等时会扩大和缩小真的很烦人。

【讨论】:

  • 我注意到,在移动设备上这一切都不起作用(它不会删除 cookie),而在桌面上它可以正常工作。
  • 那么,我想问:但是用户id是随机生成的,放在另一个mysql表上吗?这是你的意思吗?但是我如何将用户 ID 映射到另一个表上的真实凭据
  • 我不确定在移动设备上,但现在似乎整个登录系统都无法正常工作? (即,即使我使用 cookie 登录,前端也不会显示我已登录)
  • 我更改了身份验证模式(我放置了一个包含某种令牌的 cookie),除苹果移动设备外,一切正常。查看我的新帖子stackoverflow.com/questions/66754222/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 2012-04-30
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 2019-04-10
相关资源
最近更新 更多