当浏览器窗口关闭PHP时销毁cookie

时间:2018-07-05 08:12:19

标签: php wordpress cookies

我在WordPress中创建了一个弹出窗口,当访问者IP来自澳大利亚时将打开。弹出窗口将在页面加载时显示。我要使其不显示,直到关闭浏览器屏幕。

为此,我使用了cookie。单击关闭按钮时设置cookie,然后使用ajax在PHP中创建cookie。

这是我用来创建cookie的代码:

 setcookie("stay_here", "yes", 0, "/");

我将cookie时间设置为0,这样它将在浏览器关闭时销毁。问题是该站点具有用户帐户区域,并且在用户登录时创建了用户会话。关闭浏览器后,此会话不会破坏。创建上述cookie时,它会自动将过期时间设置为“会话”。

我在firefox上进行了检查,并将cookie的数据变量“ Expires”设置为“ Session”。由于关闭浏览器时会话未销毁,并且设置为Session的cookie Expires值也未销毁。

但是我希望在关闭浏览器而不是Session时销毁唯一的cookie。

希望您能理解我的问题。

你们能看看这个问题,并为我提供解决此问题的解决方案。

谢谢。

4 个答案:

答案 0 :(得分:0)

您可以使用sessionStorage https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage 它将存储在客户端,直到关闭窗口。 这是一项相对较新的功能,因此您应该检查客户端浏览器是否支持该功能。

答案 1 :(得分:0)

请参阅:https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

它在“会话cookie”下显示:

  

但是,网络浏览器可能会使用会话还原,这使得大多数   会话Cookie是永久的,就好像浏览器从未关闭过一样。

简而言之:没有可靠的方法来检测浏览器是否关闭。

您可以做的是制作一个将在12小时后过期的Cookie:

setcookie("last_page_hit",$PHP_SELF,time()+12*60*60,"/");

如果没有该cookie,则假定它是对该站点的新访问,然后再次显示弹出窗口。

答案 2 :(得分:0)

理想情况下,通过PHP中的SETCOOKIE函数创建的cookie的到期时间为0,当您关闭标签页时,它将被从浏览器中删除,并且该时间不能被会话的cookie时间覆盖。

尝试创建1个test.php页面并编写setcookie(“ stay_here”,“ yes”,0,“ /”);代码并从浏览器的cookie信息中进行检查。

您还可以将会话cookie的时间设置为0,这样在关闭浏览器时会话cookie也将被删除。

ini_set('session.cookie_lifetime',0);

答案 3 :(得分:0)

假设您设置了 rm cookie 并且您正在查看 header.php 上的页面,您可以刷新和更新 cookie 状态。

if (isset($_COOKIE['rm']) || (isset($rm) && $rm)) {
    ini_set('session.gc_maxlifetime', $lifetime);
    ini_set('session.cookie_lifetime', $lifetime);
}
相关问题