如何以及何时使用PHP登录帐户访问?

如何以及何时使用PHP登录帐户访问?,php,session,logging,login,account,Php,Session,Logging,Login,Account,我想在一些PHP应用程序中实现一个基本的登录系统,其中不涉及cookie。我的意思是,用户关闭浏览器,登录过期,它将在浏览器会话期间保持活动状态(或者如果用户明确注销),否则 我想记录所有这些活动,我认为每次用户刷新页面、打开不同的链接或注销时,我都会将该时间记录为该用户的最后一次访问,覆盖以前的访问日志 但我的问题是,何时以及如何将另一条记录插入数据库,而不是覆盖最后一条记录 我是否应该定义一个超时,如果最后一次访问超过该超时,那么应该在数据库中插入另一个日志?会话是否也应在该超时后过期 还是

我想在一些PHP应用程序中实现一个基本的登录系统,其中不涉及cookie。我的意思是,用户关闭浏览器,登录过期,它将在浏览器会话期间保持活动状态(或者如果用户明确注销),否则

我想记录所有这些活动,我认为每次用户刷新页面、打开不同的链接或注销时,我都会将该时间记录为该用户的最后一次访问,覆盖以前的访问日志

但我的问题是,何时以及如何将另一条记录插入数据库,而不是覆盖最后一条记录

我是否应该定义一个超时,如果最后一次访问超过该超时,那么应该在数据库中插入另一个日志?会话是否也应在该超时后过期

还是有更好的办法

理想情况下,我希望在浏览器关闭时记录“注销操作”,但我不认为有办法检测是否存在这种情况


建议?

当浏览器关闭时,无法触发对您有价值的操作。在这个链接中,一个用户问了一个类似的问题,他曾经问过这个问题,我怀疑你会遇到这样的问题:每次用户离开一个网页,都会被认为是他们离开了网站,因此这会干扰你的日志记录活动。我会用饼干,让它们经常过期。每次用户在您的站点上执行一些有用的操作时,都要记录他们的操作,例如。。点击一个链接,少关注他们花在阅读内容上的时间。

在这里稍微修改一下我的答案,因为你已经提到了服务器端超时

客户端唯一可以做的就是使用onbeforeunload事件调用注销页面(如果用户没有单击文档中的链接…)

不幸的是,浏览器后退、前进和刷新按钮将导致注销…
为了解决这个问题,让你的logout.php(自动注销页面)睡眠20-30秒,然后在注销之前检查最后的印象是否在30-45秒之前

只需将其添加到文档头部的脚本标记中,并将“logout.php”更改为您想要的任何内容…*如果使用链接以外的内容进行导航,您可能还需要编辑window.onload函数以正确添加onclick处理程序

    var xmlhttp=false; var target; var combo;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') { 
    xmlhttp = new XMLHttpRequest(); 
}
var dologout = true;
var logouturl = 'logout.php';
window.onbeforeunload = function() { 
    if (dologout) {
        xmlhttp.open("POST", logouturl, true); 
        xmlhttp.send(null); 
    }
}
window.onload = function() { 
    for (i=0;i<document.links.length;i++) 
    document.links[i].setAttribute("onclick","dologout = false;"); 
}
var xmlhttp=false;var目标;var组合;
/*@抄送@*/
/*@如果(@_jscript_version>=5)
请尝试{xmlhttp=newActiveXObject(“Msxml2.xmlhttp”);}
catch(e){try{xmlhttp=newactivexobject(“Microsoft.xmlhttp”);}catch(e){xmlhttp=false;}
@结束@*/
如果(!xmlhttp&&typeof XMLHttpRequest!=“未定义”){
xmlhttp=新的XMLHttpRequest();
}
var dologout=true;
var logouturl='logout.php';
window.onbeforeunload=函数(){
如果(多洛古特){
open(“POST”,logouturl,true);
xmlhttp.send(空);
}
}
window.onload=函数(){

对于(i=0;i这里真正的问题是另一个。你为什么需要这个?我的意思是。在我看来这很容易:

  • 您获取所有网站页面,并在第一行添加类似于
    session::recordAction()
    的内容,然后在该方法中连接到数据库并记录来自
    time()的时间戳
    这是一个本机函数。将该字段放置在数据库中的何处并不重要,因为它基于您的设计首选项和模式
  • 当您想知道用户是否在过去10分钟内在线时,您可以比较两个时间戳(您在数据库中记录的时间戳和
    time()
    ),然后说:

    如果(session::getLastAction()<10*$minute){/*在这里做一些很酷的事情*/}

  • 如果您正在记录操作日志,以便在出现安全问题或其他问题时恢复它们,那么您必须记住,时间戳表示用户上次刷新页面的时间。在这种情况下,我建议您使用.txt文件来记录它们,并记录i.p.以及您可以从该用户恢复的所有数据。因此,您不是ove毫无理由地使用数据库

  • 如果你是为了其他目的而建立这个系统,请告诉我,我会让你知道如何用这种方法解决你的所有问题

    提示

    请记住,实际上没有人真正按下注销按钮,他们只是离开了网站。如果他们离开了网站,就没有办法真正知道这一点。事实是,他们没有向服务器请求页面,如果1.他们离开了网站,或者2.如果他们正在阅读网页,并且没有刷新,则可能会发生这种情况

    注意

    如果我没有弄错的话,您正在寻找某种方法来建立登录系统,并且您担心cookies:

    • 浏览器关闭后,Cookie将过期(默认情况下,使用
      setcookie()
      )。您可以通过设置过去的时间戳来删除Cookie,并通过设置很长的日期使其永久有效。Cookie非常有用,许多人仍在使用
    • 会话在24或22分钟不活动(不确定,谷歌it)后过期
    我希望我是可以理解的,如果不只是要求澄清的话。
    :)

    您可以使用javascript记录浏览器关闭事件。向某些脚本发出请求,这些脚本将在浏览器真正关闭之前写入db条目。但这并不是一个很好且完全兼容的解决方案。另一种方法是定义超时并创建cronjob(在“会话超时”长时间间隔内执行)使用关闭的会话日志更新数据库。