5

我想了解在客户端检查登录状态的最佳做法是什么。我要做的是检查用户的登录状态,如果他没有使用 JavaScript 登录打开弹出框(登录框)。

我能想到2个选项

  1. 对服务器进行 AJAX 调用并获取登录状态。
  2. 在您的 HTML 页面中有一个变量,并在客户端使用 JavaScript 检查该变量。当然我不相信这个检查,我仍然在服务器端的控制器中进行了所有必要的检查。

选项 1 很好,但它会增加一些延迟/延迟,因此就用户体验而言,它可能不是最佳选择。或者我错了,有一个好的服务器(我打算使用亚马逊网络服务)这个延迟将是最小的,用户不会理解它(问题可能看起来很傻,但这是我的第一个网络开发,所以请理解 :))

我看不出选项2有任何问题,如果我错了,请纠正我。正如我所说,我试图了解最佳实践。

4

2 回答 2

1

避免服务器命中/网络延迟的最佳方法;您可以放置​​一个具有登录状态的客户端变量(如您在问题中所说),但主要是避免服务器命中和网络延迟(AJAX),您只需使用服务器端相同的逻辑来设置登录状态作为假。假设逻辑是在 5 分钟不活动后将登录状态设置为 false,您也可以在客户端执行相同操作。

所以总的来说,我的意思是,在客户端实现相同的逻辑以将登录状态设置为 false。并基于此,您可以立即显示您的登录对话框,并有任何延迟。在最佳实践中,您应该始终进行双重验证,即在服务器端对经过身份验证的内容的每个请求,您应该检查客户端登录状态是否与服务器登录状态匹配,因为客户端的登录状态可以被篡改。

祝你好运......
快乐探索:-)

于 2013-05-02T07:34:51.200 回答
0

选项 1 似乎是最好的,否则你怎么知道你保存用户 ID 的 cookie 是否没有经过调整?据我所知,最好的做法是在 cookie 中添加一个哈希(你可以看到谷歌在他们的 cookie 中这样做),然后使用它来检查 cookie 中的数据在服务器端是否有效,使用一个秘密和或盐。

http://en.wikipedia.org/wiki/Hash_function

http://en.wikipedia.org/wiki/Salt_(密码学)

无论如何,您可以做的是检查客户端javascript中是否存在带有用户ID的cookie,如果不存在,则将用户发送到登录页面。

https://developer.mozilla.org/en-US/docs/DOM/document.cookie

这样,您就不需要明显注销的用户进行服务器往返。

但是,您不能在用户向您的服务器发出的第一个请求时已经进行检查吗?如果用户未登录,则使用登录页面响应?

于 2013-05-02T07:31:38.857 回答