在加载任何页面之前处理数据库查询的最佳方法是什么?

时间:2014-06-23 12:52:26

标签: php laravel laravel-4

我正在使用 laravel 4 framework ,但如果需要的话,我愿意采用非laravel方式。登录用户维护在数据库'active_users'中,如果他们的记录从该数据库中删除,我想调用Auth :: logout()。最好的方法是什么?

这些是我考虑的选择:
1.作为一个事件(不知道如何去做)
2.使用AJAX轮询查询数据库的脚本 3.使用(之前)过滤器。
4. 使用基于表格的会话< =这似乎是一个有吸引力的选择。

如果有更好的不同方法,请告诉我,谢谢。

1 个答案:

答案 0 :(得分:0)

这很简单。我高度假设你在每个可以处理服务器端代码的页面上都有一些服务器端执行,包括会话处理。

如果您要在客户端中存储类似local storage的用户,则需要AJAX,但我认为您只是在服务器上处理用户会话。

如果用户存在,只需创建一个返回booltrue的函数,否则为false。如果函数返回false,那么您只需使用类似session_destroy()的内容销毁用户的会话。

当你SELECT行与当前用户匹配时,该函数可以计算获取的行数,如果它返回0,那么你知道该行已被删除(或者它从未存在过,或者它首先不存在,它没关系)。将active列添加到行更有意义,如果您希望停用用户,则可以将其更新为0而不是1,这样就可以保留历史记录。因此,您将选择用户处于活动状态的WHERE,即1,(如果已将其更改为0,则返回0行)。

在检查是否允许用户查看您网站的某些部分之前,请执行此操作,这样就可以像未登录的用户一样处理这些部分。

编辑解决方案取决于要求的严格程度,如果用户必须在用户执行的活动期间注销,那么您需要检查用户每次执行时是否仍处于活动状态一些活动,如果该活动是客户端,那么您需要使用AJAX来检查用户是否仍然被允许做他将要做的事情。如果用户首先获得了登录的许可,那么这可能是一个过载,但这不是我要说的。

<强> 修改

你使用什么框架并不重要,但好吧,你正在使用Laravel。我知道你可以使用Auth::logout()函数,然后使用它! :)

function userIsActive(){...}
$active = userIsActive();
if(!$active)
{
    Auth::logout();
}

不需要AJAX除非您想要执行JavaScript活动,否则用户可以执行需要登录权限的JavaScript活动那么只需要使用AJAX来检查它们是否仍处于活动状态。

如果是安全性和认证问题,如果用户关闭了JavaScript(或者由于某种原因将其禁用,可能是用户不知道的话),那么仅使用AJAX是不好的,那么你几乎就是......我我不打算完成那句话:)