0

我正在使用 HTML/CSS/JS 开发一个混合移动应用程序,我正在使用登录信息检查安全性,我设置的系统在用户登录后创建一个哈希,这个哈希有时间限制,并且通过本地存储

本质上,我会有这样的本地存储:

hash
5f4a09cfec2a6d8f306eecb3844e33e9
hash_expiration
1373012945
password
*encryted user password*

这个哈希被发送到我的服务器以在我所有的 AJAX 请求的标头中进行验证(伴随着用于数据库匹配的用户 ID)

我主要是打开这个主题来讨论如何处理重新创建哈希键的最佳实践,我需要找出一种刷新用户哈希键的方法。

考虑到我在 AJAX 和 JS 方面的经验仍然相当有限,我考虑过使用 AJAX 设置来检查新的哈希,如下所示:

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        var time = new Date().getTime(); //unix time
        var hash_time = localStorage.getItem("hash_expiration");
        if(time>hash_time){
            //ajax request to fetch new hash, async: false to make sure this completes before continuing with other AJAX calls
        }
    }
});

我会发送用户 ID 和他的加密密码来验证他并返回一个新的哈希值。

我应该在 ajaxSetup 的 beforeSend 中发送 AJAX 请求吗?这将如何与我的应用程序中的其他 beforeSend 发生冲突?

4

1 回答 1

1

基本上在客户端你不应该有任何东西,除了哈希。在服务器端,此哈希必须与它所属的用户、过期时间以及您需要的任何其他内容相关联。

随每个请求发送此哈希,并在服务器端对其进行验证。当它过期时,您必须发送(服务器)适当的标头,例如 401 - 未经授权。客户必须了解该响应并尝试将哈希交换为新的。最后,当客户端获得新的有效哈希时,它可以继续发送请求。

...而且您不应该在客户端检查过期时间,这项工作适用于服务器。

谢谢。

于 2013-07-04T11:34:24.503 回答