Сеанс будет препятствовать повторному появлению модального режима в течение оставшегося времени, когда клиент имеет открытый браузер, или до истечения / закрытия сеанса на стороне сервера (кратковременно). Файл cookie будет препятствовать повторному появлению модальной модели, пока файл cookie не будет удален с их компьютера (на длительный срок)
Вот как я могу это сделать, используя модал начальной загрузки и куки:
- Проверьте, существует ли уже cookie.
- Если cookie не существует, запустите модальное.
- После подтверждения модального режима сохраните файл 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-кода для модального объекта, предпочтительно нижнего колонтитула.