在 PHP 中关闭网页时如何取消设置会话
how unset session when close the web page in php
当我通过单击 [x] 关闭页面时,如何取消设置 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"]);
}
在页面加载的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";
}
?>
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) 模式 php.ini session.cookie_lifetime 到 0(会话在浏览器关闭时结束 - 与上述相同,但更全局)
4)每30秒有一个ajax回调,如果你在一分钟后没有收到回调,假设浏览器已经关闭,然后杀死会话。(需要相当多的处理!
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- jquery点击函数select&取消选择
- 使用Jquery选择或取消选择ListView中的所有复选框
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 使用jquery选中/取消选中单个复选框
- 使用javascript取消隐藏和隐藏表单中的某些元素
- 如何销毁/删除/取消绑定SnapSVG.js
- 滚动然后捕捉到顶部而不是取消捕捉
- 验证会话中是否存在对象's数组
- 取消绑定主干视图事件
- 如何取消object.prototypes javascript的一个函数
- 使用javascript在页面加载时取消选中所有复选框
- Chrome和Firefox不会取消设置会话数组,但IE和Safari会取消设置
- 在 PHP 中关闭网页时如何取消设置会话
- 如何在页面关闭时取消设置会话
- 单击将 PHP 会话设置为保持复选框处于选中状态.取消选中结束会话时
- 正在取消本机android会话超时警告
- 在按钮单击事件上取消设置会话变量
- 如何使用删除按钮在购物车中取消设置会话产品
- 检查会话是否为空,取消设置,然后发送$_POST数据