下面是我网站流程的一部分,我有一些问题,感谢任何建议。
用户访问页面>
如果之前没有访问(isset session[id]),
1. 在会话[id]中存储一个临时id。
2. 在服务器上创建一个名为session[id]的文件夹。
用户完成活动后离开页面。
1. 1小时后,删除目录
Q1 。用户离开后,有时文件夹会被成功删除,但有时不会,为什么?
如何设置1小时后删除文件夹?
在(Mamp localhost, Safari, Firefox)不同的情况下测试:单击窗口关闭按钮2。直接退出浏览器程序同样的窗口转发到其他网站。4. 切断网络信号。(Mamp localhost, Safari, Firefox)
window.onbeforeunload = confirmExit;
function confirmExit(){
$.ajax({
type: "POST",
url: "index.php",
data: 'remove_session='+'remove_session', // trigger php remove folder and row in table
success: function(html){
}
});
};
Q2 。是否有更好的方法来检测用户是否来过?用户不在网站上?
用户离开后,有时文件夹会被成功删除,但有时不会??为什么?如何避免这种情况发生呢?
(你并没有解释这个概念是如何实现的,但我假设你没有使用cronjob)
发生这种情况是因为,要运行脚本,服务器需要发出请求。这意味着如果用户离开并且之后没有请求,那么您将无法删除该文件夹(尚)。
要解决这个问题,你很可能需要一个Cron作业。你可以在谷歌和这里找到大量的教程和信息。
是否有更好的方法来检测用户是否来过?
您当前的系统使用不能完全信任的会话作为用户输入的危险组的一部分(会话通过cookie实现)。但你需要某种追踪;我想到的选项是:
- 在数据库中存储客人信息(IP, MAC等)
- 创建登录系统(存储上次登录时间戳)
然后,一旦你有了最后一次访问的时间戳,我想你就能算出来了。
和用户不在网站上?
这是一个非常热门的话题。你可以很容易地找到大量的StackOverflow问题。
简短的故事是:如果你可以使用Javascript,那么你可以得到一个相当不错的精度(下降到~5秒的跨度,更少是不鼓励的),如果你不这样做,那么你将设置一个分钟数(让我们称之为X)之后,用户被定义为AFK/*离线*(大多数时间是10-15分钟)。
基本思想如下(Javascript的超时函数,否则每个请求):
- 存储用户向服务器发出的最后一个请求的时间戳到
last_seen
- 需要时取
last_seen
,与time()
比较。 - 如果差值为<X(其中X是上面定义的时间)用户是开的,否则是关的>
注意:以Javascript为例,如果你将timeout函数设置为每5秒发送一次请求,你可以很容易地用X = 10秒(有~10秒的精度)检查计时
不确定您的网站是如何设置或您实际存储的,但您可能只是保持数据客户端(cookie/本地存储)?
如果你只是想清理旧的文件夹,试着给你的用户会话添加一个时间戳,每小时清理一次x时间以后没有访问的文件夹。