首页 > 解决方案 > JS 和 jquery 在会话结束或窗口关闭之前设置一个新的 cookie

问题描述

我不会发出通知,通知用户自上次访问以来新项目的数量。

我有一个代码可以做到这一点,但是有一个问题,如果用户刷新一个页面或住在同一域上的另一个页面并返回数字设置为 0。我需要一种方法来使新项目的数量保持不变,直到用户关闭窗口或会话已过期。

代码当前执行以下操作:

<?php
$result = mysqli_query($con, "SELECT na_id from NALOG;");
$row_cnt = mysqli_num_rows($result);

printf("U bazi su trenutno %d naloga.\n", $row_cnt);
// takes the number of curent DB state

printf("<script type='text/javascript'>
$.cookie('".$_SESSION['username_login']."');
var logstari = $.cookie('".$_SESSION['username_login']."');
// reads old coocke vale and sets is as varibale


$.cookie('".$_SESSION['username_login']."', '%d');
var log = $.cookie('".$_SESSION['username_login']."');
//sets new state count as new cookie and  varible

var razlika = log - logstari;
// makes caluclation of diference

toastr.info(razlika + ' novih naloga od tvog zadnjeg posjeta'):
//lets the notification out
</script>", $row_cnt);

?>

我也尝试过这种方式:

        <?php
$result = mysqli_query($con, "SELECT na_id from NALOG;");
$row_cnt = mysqli_num_rows($result);

printf("U bazi su trenutno %d naloga.\n", $row_cnt);

printf("<script type='text/javascript'>
$.cookie('".$_SESSION['username_login']."');
var logstari = $.cookie('".$_SESSION['username_login']."'); 
var log = ".'%d', $row_cnt.";
var razlika = log - logstari;
toastr.info(razlika + ' novih naloga od tvog zadnjeg posjeta');

$.cookie('".$_SESSION['username_login']."', '%d');
</script>", $row_cnt);

                        ?>

我试图在var log = ".'%d', $row_cnt.";php 中设置新的日志编号,但是我如何尝试转义 PHP 值并将其插入到 JS 变量中它不起作用并且我得到错误 printf(): Too few arguments。如果我能以某种方式完成这项工作,我正在考虑在最后一行设置一个具有新计数的新 cookie,仅在会话过期或窗口关闭(如果可能)之后。

不知道如何再解决这个问题,因此需要任何帮助或指导。

编辑:

我最后的成就,刷新后仍然失去价值。

        <?php
$result = mysqli_query($con, "SELECT na_id from NALOG;");
$row_cnt = mysqli_num_rows($result);

printf("U bazi su trenutno %d naloga.\n", $row_cnt);

printf("<script type='text/javascript'>
var logstari = $.cookie('".$_SESSION['username_login']."');

var log = '%d';
var razlika = log - logstari;
toastr.info(razlika + ' novih naloga od tvog zadnjeg posjeta');
</script>", $row_cnt);

printf("<script type='text/javascript'>
$.cookie('".$_SESSION['username_login']."', '%d');
</script>", $row_cnt);

                        ?>

标签: javascriptjquerysession

解决方案


也许会好的

<?php
session_start();

if(!isset($_SESSION['news-number'])){
    $news_number = 0;

    // Do something
    echo "news number updated";
    $news_number = 45;
    // Do something

    $_SESSION['news-number'] = $news_number;
}

echo $_SESSION['news-number'];

?>

您可以使用 cookie 做同样的事情,如果定义了用户会话(或类似的东西),不要更新 cookie,否则用它的新值定义它

编辑 :

<?php
session_start();

if(!isset($_SESSION['news-number'])){
    $result = mysqli_query($con, "SELECT na_id from NALOG;");
    $news_number = mysqli_num_rows($result);

    $_SESSION['news-number'] = $news_number;
}

echo "<script> var value=" . $_SESSION['news-number'] . "</script>";

?>

这只是一个逻辑示例,不要实现这个,然后在脚本中 echo var 这不是最好的方法将变量从 php 传递到 js 脚本


推荐阅读