当用户进入网站时,它会发送默认语言,同时会强制用户从列表中
选择一种语言... 当用户选择语言时,它会设置$ _SESSION ['language'] = $ _POST [ 'lg'];
同时设置另一个$ _SESSION ['sestime'] = time();
通过本次会议,我可以做到这一点:
if(isset($_SESSION['sestime']) && (time() - $_SESSION['sestime'] > 600)) {
session_unset(); session_destroy();
header("Location: $sred");
exit;
}
$_SESSION['sestime'] = time();
Run Code Online (Sandbox Code Playgroud)
如果在10分钟内没有任何活动,它会销毁/删除/取消任何会话,其想法是再次询问lanaguage ...现在,这是“有效的”,但是我想要的是“检测”当用户将要关闭浏览器选项卡时,网站选项卡...如果用户关闭该选项卡,则“破坏/删除/取消设置”该网站的任何会话...
这可能吗?
会话Cookie通常在没有到期时间的情况下发送,这意味着在关闭浏览器时会删除会话Cookie,因此无论如何会话都会丢失。
您可以为会话数据设置过期时间,使用每个session_start调用对其进行测试,并在会话过期时销毁该会话:
session_start();
if (!isset($_SESSION['EXPIRES']) || $_SESSION['EXPIRES'] < time()+3600) {
session_destroy();
$_SESSION = array();
}
$_SESSION['EXPIRES'] = time() + 3600;
Run Code Online (Sandbox Code Playgroud)
用自己的方法实现会话超时。使用一个简单的时间戳来表示最后一个请求的时间,并根据每个请求进行更新:
您需要编写与此类似的代码
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
// request 30 minates ago
session_destroy();
session_unset();
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time
Run Code Online (Sandbox Code Playgroud)
session_start(); // ready to go!
$now = time();
if (isset($_SESSION['discard_after']) && $now > $_SESSION['discard_after']) {
// this session has worn out its welcome; kill it and start a brand new one
session_unset();
session_destroy();
session_start();
}
// either new or old, it should live at most for another hour
$_SESSION['discard_after'] = $now + 3600;
Run Code Online (Sandbox Code Playgroud)
4)当用户离开页面时,将unload事件发送到window元素。这可能意味着很多事情之一。用户可能已经单击了链接以离开页面,或在地址栏中输入了新的URL。前进和后退按钮将触发事件。关闭浏览器窗口将导致事件被触发。即使页面重新加载也会首先创建一个卸载事件。
$( window ).unload(function() {
//use ajax to call another page to session_destroy();
});
Run Code Online (Sandbox Code Playgroud)
问题是:如果用户在您的网站上打开了两个或多个标签,该怎么办?如果他们关闭一个标签,则另一个标签将被有效注销。