为什么在重新加载而不是窗口加载后引导模态弹出窗口。可能是什么原因?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在重新加载而不是窗口加载后引导模态弹出窗口。可能是什么原因?相关的知识,希望对你有一定的参考价值。

我正在每个页面上设置Bootstrap模态窗口,并在背景上隐藏滚动以获取潜在客户的详细信息,因为我们获得了足够的流量。

我正在使用header.php进行所有编码,每次使用加载弹出窗口。单击关闭或提交选项后,应隐藏弹出窗口。点击关闭或立即提交后,任何页面上都没有弹出窗口。

我在关闭或提交点击后使用会话隐藏弹出窗口。这工作正常。

会话安全吗?什么是其他选择?

我得到了什么样的问题 - 在加载后重新加载而不是窗口时弹出。

看起来像cookie问题,标头缓存问题。我不知道

经过研究我已经完成了一次窗口重载。它在url中给出了一些变量

点击这里:https://www.carlo.in/new-cars-test

请向我推荐一些其他选项或为我提供解决方案。

答案

在客户端打开浏览器的剩余时间内或者在服务器端(短期)会话过期/关闭之前,会话将使模式不再出现。只要不从计算机中删除cookie,cookie就会使模态不再出现(长期)

以下是使用bootstrap模式和cookie的方法:

  1. 检查cookie是否已存在。
  2. 如果cookie不存在,请运行模式。
  3. 确认模态后,将cookie存储在客户端的计算机上。

header.php文件

  # check if "Got-It!" button has been pressed
  if (isset($_POST['btn_modal'])) {
    $nameofCookie = $_POST['btn_modal'] . '-' . $_SERVER['REMOTE_ADDR']; // store name of modal with client's IP for the cookie's name
    $cookieExp = (86400 * 365); // time in seconds for cookie to expire
    # check if this cookie exists already
    if (!array_key_exists($nameofCookie, $_COOKIE)) {
      setcookie($name, '_any_value_goes_here_to_store_in_cookie', $cookieExp, '/'); // create cookie
      header('Location: https://' . $_SERVER['HTTP_HOST'] . URI); // refresh the current page after they click "Got It!"
      die();
    }
  }

我个人更喜欢在用户登录时使用用户名,但如果没有在会话中存储用户名,则可以使用他们的IP,如上所示。这是用户名,只有一行不同。

  # check if "Got-It!" button has been pressed
  if (isset($_POST['btn_modal'])) {
    $nameofCookie = $_POST['btn_modal'] . '-' . $_SESSION['username']; // store name of modal with client's username for the cookie's name
    $cookieExp = (86400 * 365); // time in seconds for cookie to expire
    # check if this cookie exists already
    if (!array_key_exists($nameofCookie, $_COOKIE)) {
      setcookie($name, '_any_value_goes_here_to_store_in_cookie', $cookieExp, '/'); // create cookie
      header('Location: https://' . $_SERVER['HTTP_HOST'] . URI); // refresh the current page after they click "Got It!"
      die();
    }
  }

index.php(或模态正在进行的任何页面)

<!-- code... -->

  <!-- begin: What's New? [Modal] -->
    <div class="modal fade" id="newModal" tabindex="-1" role="dialog">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title">What's new</h5>
          </div>
          <div class="modal-body">
            <ul>
              <li>NEW THIS</li>
              <li>NEW THAT</li>
              <li>NEW EVERYTHING</li>
            </ul>
          </div>
          <div class="modal-footer">
            <form method="post" action="<?=$_SERVER['REQUEST_URI'];?>">
              <button type="submit" class="btn btn-primary" name="btn_modal" value="newModal">Got It!</button>
            </form>
          </div>
        </div>
      </div>
    </div>
  <!-- end: What's New? [Modal] -->

<!-- more code... ->

footer.php

  if(array_key_exists($nameofCookie, $_COOKIE)) {
    echo "<script>
            $(window).on('load',function(){
              $('#newModal').modal('show');
            });
          </script>";
  }

设置cookie的脚本必须放在标题中,最好是检查并运行模式的脚本放在模式的html代码之后的任何地方,最好是页脚。

以上是关于为什么在重新加载而不是窗口加载后引导模态弹出窗口。可能是什么原因?的主要内容,如果未能解决你的问题,请参考以下文章

引导弹出窗口中的 Django 登录表单

远程内容更改引导模式窗口大小

使用 jquery 防止 yii 模态弹出窗口关闭

以模式重新加载内容(推特引导程序)

从不同的窗口(不是子窗口)重新加载 iframe - javascript

提交表单后模态弹出窗口未正确关闭