【问题标题】:Destroy cookie when browser window closes PHP当浏览器窗口关闭 PHP 时销毁 cookie
【发布时间】:2018-12-13 15:24:46
【问题描述】:

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

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

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

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

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

我在firefox上检查了这个,cookie的数据变量“Expires”设置为“Session”。因为当我关闭浏览器时会话没有被破坏,并且设置为 Session 的 cookie Expires 值也没有被破坏。

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

希望你能理解我的问题。

你们能否看看这个问题并为我提供解决方案来实现这种情况。

提前致谢。

【问题讨论】:

    标签: php wordpress cookies


    【解决方案1】:

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

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

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

    ini_set('session.cookie_lifetime', 0);

    【讨论】:

    • 我试过这个。在这种情况下,cookie 被破坏,因为页面上没有会话。但我希望即使会话保持活动状态,cookie 在浏览器关闭后也会被销毁
    • 是的,即使您的会话 cookie 时间不是 0 并且您将 cookie 设置为 0 过期时间,您的 cookie 将在浏览器关闭时过期,但会话 cookie 将保持原样。相应地检查。
    • 当浏览器接近修复这个问题时,有什么办法可以同时销毁会话和cookie?
    • 通过参数 session.cookie_lifetime 将会话 cookie 时间设置为 0,或者您可以通过 .htaccess 或从 php.ini 或从 PHP 文件设置它 - ini_set('session.cookie_lifetime', 0);跨度>
    • 是否会因为网站是电子商务网站而影响我的购物车?
    【解决方案2】:

    见: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 不存在,则您认为这是对网站的新访问,然后您再次显示弹出窗口。

    【讨论】:

    • 所以,你的意思是我必须设置到期时间而不是 0。对吗?
    • 是的,这可能是有道理的,但这是一种相当粗糙的方法。您还可以将点击的最后一页存储在 cookie 中。如果超过 12 小时,自上一页被点击后,您可以假设这是一次新访问。 (很抱歉此评论的许多编辑)
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 2012-07-29
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多