如何在浏览器关闭后立即删除所有cookie(使用HTML和JavaScript) 我的网站是什么,它是赤裸裸的

如何在浏览器关闭后立即删除所有cookie(使用HTML和JavaScript) 我的网站是什么,它是赤裸裸的,javascript,cookies,Javascript,Cookies,一个由HTML、CSS和普通JavaScript组成的基本网站。我正在使用JavaScript将前端密码保护集成到站点,以检查凭据,并分配一个cookie,将其标记为已登录。这只是一个附带项目,内容的安全性不是很必要。目标受众也不知道如何从浏览器添加cookie或以任何方式操纵系统 一旦用户登录,他们就会被重定向到主页,在那里检查cookie。如果登录cookie存在,他们将加载页面;如果不存在,用户将被重定向到登录页面,并显示一条要求登录的说明。到目前为止还不错 怎么了? 和大多数web开发人

一个由HTML、CSS和普通JavaScript组成的基本网站。我正在使用JavaScript将前端密码保护集成到站点,以检查凭据,并分配一个cookie,将其标记为已登录。这只是一个附带项目,内容的安全性不是很必要。目标受众也不知道如何从浏览器添加cookie或以任何方式操纵系统
一旦用户登录,他们就会被重定向到主页,在那里检查cookie。如果登录cookie存在,他们将加载页面;如果不存在,用户将被重定向到登录页面,并显示一条要求登录的说明。到目前为止还不错

怎么了? 和大多数web开发人员一样,我在发出绿色信号之前就开始测试该网站,结果发现在我关闭浏览器后,Chrome无法清除cookies。这是一项令人扫兴的运动。然后,我尝试在所有页面上使用onunload功能来删除cookies,但是cookies甚至在用户到达主页之前就被删除了,因此,cookies被定向到主页。我不想使用会话存储,因为在其他选项卡中打开站点不会将会话存储带到其他选项卡


有什么方法可以在浏览器关闭时删除cookies吗?

在一小时后删除所有cookies

function deleteAllCookies() {
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

当用户登录或启动应用程序时调用myFunction

没有解决您问题的灵丹妙药
但是,使用
服务人员
以及
任务调度
API和一些JavaScript,您将达到接近的效果


更多信息-

因为所有这些编程都是在客户端而不是服务器端进行的,所以cookie可能不是最好的方法-cookie用于在客户端和服务器之间传输持久信息。对于存储在客户机上的可控半持久数据,本地存储可能是更合适的选择。本地存储通过同一站点上的不同选项卡持久化

一种可能的方法是,在站点上的任何页面上次打开后,让保存的数据在一定时间内过期。例如,您可以在每个页面上都有一个脚本,该脚本每分钟或每五分钟运行一次,并将到期时间设置为未来的一小时或10分钟,或者类似的时间,这取决于您希望在不活动后注销时进行多大程度的精细控制。代码如下所示:

// on pageload:
const advanceExpiry = () => {
  localStorage.loginExpiry = Date.now() + 1000 * 60 * 10;
};
const loggedIn = localStorage.loginExpiry && localStorage.loginExpiry > Date.now();

if (loggedIn) {
  advanceExpiry();
  // every few minutes, push login expiry 10 minutes in the future:
  setInterval(advanceExpiry, 1000 * 60 * 5);
} else {
  // user has not logged in, or login has expired
  localStorage.loginExpiry = 0;
  // redirect to login page
}
在登录页面上,do
localStorage.loginExpiry=Date.now()+1000*60*10后接重定向


需要指出的是,前端的验证不是远程安全的——但你已经知道这一点,并且认为这无关紧要,这很好。

cookie过期时间可能会有所帮助,但它与“关闭浏览器后”并不完全相同,甚至可能会起作用。我想在登录1小时后删除网站上的所有cookie。我如何做到这一点?您是否有任何服务器端编程,或者所有代码都是前端JavaScript/HTML等?也就是说,没有PHP或节点或类似的东西,对吗?是的,只有HTML、JavaScript和CSS。无后端架构whatsoeverI我想在某个事件发生一小时后或关闭浏览器时删除所有cookie。这是怎么发生的?将回答您的问题。如何确保它何时运行?它有助于删除cookie,但它何时执行呢?检查它将在1小时后删除cookie。您也可以使用setTimeout并调用其中的delete cookie函数。我是JavaScript领域的新手。只是想知道我们是否可以通过某种方式将过期时间设置为一个变量?但我怀疑如果用户关闭站点,脚本是否会运行。例如,假设他们在5分钟后离开,那么脚本是否会在后台运行以确保遵守注销时间?脚本的要点是仅在用户联机时运行,并在将来持续将到期时间推到几分钟。如果用户一次脱机超过10分钟,则
localStorage.loginExpiry
将过期,因此一旦用户再次加载页面,脚本将看到他们的登录已过期。
// on pageload:
const advanceExpiry = () => {
  localStorage.loginExpiry = Date.now() + 1000 * 60 * 10;
};
const loggedIn = localStorage.loginExpiry && localStorage.loginExpiry > Date.now();

if (loggedIn) {
  advanceExpiry();
  // every few minutes, push login expiry 10 minutes in the future:
  setInterval(advanceExpiry, 1000 * 60 * 5);
} else {
  // user has not logged in, or login has expired
  localStorage.loginExpiry = 0;
  // redirect to login page
}