-1

以下是我网站流程的一部分,我有一些问题,感谢任何建议。

用户访问页面>
如果之前没有访问过 (isset session[id]),
1. 在 session[id] 中提供一个临时 id 存储。
2. 在服务器中创建一个名为 session[id] 的文件夹。

用户完成活动后,然后离开页面。
1. 1小时后,删除目录中的文件夹。


Q1。用户离开后,有时文件夹会成功删除,但有时不会,为什么?
1小时后如何设置删除文件夹?

在(Mamp localhost, Safari, Firefox)不同情况下测试: 1. 点击窗口关闭按钮 2. 直接退出浏览器程序 3. 同一窗口转发到其他网站。4.切断网络信号。(Mamp 本地主机,Safari,火狐)

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。有没有更好的方法检测用户之前来过?用户不在网站上?

4

2 回答 2

1

不确定您的网站是如何设置的或您实际存储的内容,但您可能只保留数据客户端(cookie/本地存储)?

如果您只想清理旧文件夹,请尝试为您的用户会话添加时间戳,并每小时清理一次自 x 时间以来未访问的所有文件夹。

于 2013-03-31T23:41:55.010 回答
1

用户离开后,有时文件夹会成功删除,但有时不会??为什么?以及如何避免这种情况发生?

这不像你已经解释了这个概念是如何实现的,但我假设你没有使用 cronjob

发生这种情况是因为,要运行您的脚本,您的服务器需要发出请求。这意味着如果用户离开并且之后没有发出任何请求,那么您将无法删除该文件夹(尚未)。

要解决此问题,您很可能需要Cron 作业。您可以在 Google 和此处找到大量教程和信息。

有没有更好的方法检测用户之前来过?

您当前的系统使用不能完全信任的会话作为危险的用户输入组的一部分(会话通过 cookie 实现)。但是您需要某种跟踪;我想到的选项是:

  • 将客人信息存储在数据库中(IP、MAC 等)
  • 创建登录系统(存储上次登录时间戳)

然后,一旦你有了最后一次访问时间戳,我想你就可以弄清楚了。

用户不在网站上?

这是一个非常受讨论的话题。您可以轻松找到大量 StackOverflow 问题。

简短的故事是:如果您可以使用 Javascript,那么您可以获得相当不错的精度(低至约 5 秒的跨度,不鼓励更少),如果您不这样做,那么您将设置分钟数(我们称之为X) 之后用户被定义为AFK /*Offline*(大部分时间为 10-15 分钟)。

基本思想如下(Javascript 的超时函数,否则按请求):

  • 将用户向服务器发出的最后一次请求的时间戳存储到last_seen
  • 需要时获取last_seen并将其与time().
  • 如果差异 < X(其中 X 是上面定义的时间),则用户打开,否则关闭

注意:以 Javascript 为例,如果您将超时功能设置为每 5 秒发送一次请求,您可以轻松地检查 X = 10 秒的时间(精度约为 10 秒)。

于 2013-04-27T10:59:12.053 回答