javascript - 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);
?>
解决方案
也许会好的
<?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 脚本
推荐阅读
- python-3.x - 展平字典python列表
- css - 如何使用 flex 调整三个 div 以占据屏幕的确切宽度?
- string - 在字符串错误时调用成员函数 profile()
- php - SQLSTATE [HY000]:一般错误:1364 字段“性别”没有默认值
- r - 为什么这两个对象不一样?
- python - 使用 OpenCV 在对象周围绘制轮廓
- reactjs - React Router v5.0 嵌套路由
- protocol-buffers - 为什么 gRPC 使用长度前缀消息?
- javascript - tokenfield 不适用于 jQuery 克隆
- android - 无法将 ViewPager 与 androidx 一起使用