我创建的 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);
效果
使用效果使网站动态化时应小心。就个人而言,我发现“登录”表单在进入和离开焦点时会扩展和收缩等,这真的很烦人。
我正在尝试在按下“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);
效果
使用效果使网站动态化时应小心。就个人而言,我发现“登录”表单在进入和离开焦点时会扩展和收缩等,这真的很烦人。