我正在制作一个查看计数系统。但问题是,无论何时人重新加载页面,视图都会增加 为了阻止它,我使用了一个会话变量 代码如下:
if ($_SESSION['var'] == NULL){
$start = "UPDATE table SET views = views+1 WHERE value = $value";
$_SESSION['var'] = true;
}
如果刷新页面,会话变量保持不变,条件失败,没有任何反应。
问题:
但是,如果页面被关闭并重新打开,则视图不会增加而应该增加
我究竟做错了什么?
我写了session_start()
和PDO查询来执行该功能。
答案 0 :(得分:0)
为了实现您的目标,您需要在浏览器选项卡/窗口关闭时销毁会话。因此,您需要一个在窗口关闭时销毁会话参数的Ajax请求。
引用本文:http://eureka.ykyuen.info/2011/02/22/jquery-javascript-capture-the-browser-or-tab-closed-event/
在您的网络根目录中,创建js / check_browser_close.js。
/**
* This javascript file checks for the brower/browser tab action.
* It is based on the file menstioned by Daniel Melo.
* Reference: http://stackoverflow.com/questions/1921941/close-kill-the-session-when-the-browser-or-tab-is-closed
*/
var validNavigation = false;
function wireUpEvents() {
/**
* For a list of events that triggers onbeforeunload on IE
* check http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx
*
* onbeforeunload for IE and chrome
* check http://stackoverflow.com/questions/1802930/setting-onbeforeunload-on-body-element-in-chrome-and-ie-using-jquery
*/
var dont_confirm_leave = 0; //set dont_confirm_leave to 1 when you want the user to be able to leave withou confirmation
var leave_message = 'You sure you want to leave?'
function goodbye(e) {
if (!validNavigation) {
if (dont_confirm_leave!==1) {
if(!e) e = window.event;
//e.cancelBubble is supported by IE - this will kill the bubbling process.
e.cancelBubble = true;
e.returnValue = leave_message;
//e.stopPropagation works in Firefox.
if (e.stopPropagation) {
e.stopPropagation();
e.preventDefault();
}
//return works for Chrome and Safari
return leave_message;
}
}
}
window.onbeforeunload=goodbye;
// Attach the event keypress to exclude the F5 refresh
$(document).bind('keypress', function(e) {
if (e.keyCode == 116){
validNavigation = true;
}
});
// Attach the event click for all links in the page
$("a").bind("click", function() {
validNavigation = true;
});
// Attach the event submit for all forms in the page
$("form").bind("submit", function() {
validNavigation = true;
});
// Attach the event click for all inputs in the page
$("input[type=submit]").bind("click", function() {
validNavigation = true;
});
}
// Wire up the events as soon as the DOM tree is ready
$(document).ready(function() {
wireUpEvents();
});
还要在您的Web根目录中创建以下.html来测试上述Javascript文件。
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="js/check_browser_close.js"></script>
</head>
<body>
<h1>Eureka!</h1>
<a href="http://www.google.com">Google</a>
<a href="http://www.yahoo.com">Yahoo</a>
<a href="http://ykyuen.wordpress.com">Eureka!</a>
</body>
</html>
现在您需要修改代码以调用服务器端文件以使用Ajax销毁会话。