单击[x](不是onunload)关闭页面时,如何取消设置SESSION。我想在打开页面时和关闭时插入,但我不想在刷新时插入。
if (!isset($_SESSION["visits"]))
$_SESSION["visits"] = 0;
$_SESSION["visits"] = $_SESSION["visits"] + 1;
if ($_SESSION["visits"] > 1){echo "You hit the refresh button!";}
else{
mysql_query(
"INSERT INTO najd_visit( visit_userId, visit_staticId, visit_page,
visit_enterTime)VALUES ('$userId', '$Sid', '$title', '$date') ");
echo "This is my site";
//unset($_SESSION["visits"]);
}
答案 0 :(得分:1)
在页面加载的JS事件和离开(onbeforeunload
事件)之前对你的php进行ajax调用。
更好地依赖于像jQuery这样的JS库,因为对两个事件监听器的直接JS跨浏览器实现对代码来说非常棘手。
更新。感谢@piers评论,我发现我的解决方案并不完整,因为它会在页面刷新时计算。如果我正确理解了任务,那么目标是计算页面打开和离开,而不是计算刷新事件。
所以,也许,没有必要在页面关闭时取消设置会话 - 让它在服务器超时时消失?
您可以使用session_id确定页面/会话对是否唯一。例如,您可以在会话中保留访问过的网页网址,以检查您是否已计入以下内容:
<?php
$uri = $_SERVER['REQUEST_URI'];
if( is_set( $_SESSION['seen']) {
if( !in_array( $uri, $_SESSION['seen'])){
countup( $uri);
} else {
// already counted that page
}
} else { // session doesn't have the seen array yet
countup( $uri);
}
function countup( $uri) {
$_SESSION['seen'][] = $uri;
mysql_query( "
INSERT INTO najd_visit
( visit_userId, visit_staticId, visit_page, visit_enterTime)
VALUES ('$userId', '$Sid', '$title', '$date')
");
echo "This is my site";
}
?>
答案 1 :(得分:0)
session_set_cookie_params(0);
session_start()
手动:http://www.php.net/manual/en/function.session-set-cookie-params.php
澄清:
您想在用户不再访问您的网站时终止会话?但如果他们留在你的网站上(后退按钮,转发等),那么你想保持会话。
要回答直接问题 - 您无法跟踪用户何时关闭浏览器 - 即当他们按照评论中的要求点击“x”时。
您无法使用“onunload”,因为当用户点击您网站上的网页时会发生这种情况。
所以你有四个选择:
1)使用cookie手动控制会话,并在浏览器会话结束时将cookie设置为过期。
2)Mofify session_set_cookie_params(0)http://www.php.net/manual/en/function.session-set-cookie-params.php因此会话在浏览器关闭时结束。
3)modity php.ini session.cookie_lifetime为0(当浏览器关闭时会话结束 - 与上面相同但更全局化)
4)每30秒钟回拨一次ajax,如果一分钟后没有收到回叫,则假设浏览器已关闭,然后终止会话。 (需要大量处理!)