【问题标题】:How to Cache notification data obtain by Ajax call?如何缓存 Ajax 调用获取的通知数据?
【发布时间】:2014-10-04 12:15:34
【问题描述】:

我在我的Web应用程序中使用推送通知服务,我的项目需求之一是缓存通过Ajax调用获得的通知数据,以便用户从一个页面切换到另一个页面时可以查看相同的数据,

我有 3 个流程来实现上述案例场景

流程:1

在 javascript 对象和重定向页面时缓存通知数据 使用 $.param() 序列化 obj ,在浏览器 url 中发送数据(在这种情况下我的数据 将可见)。

流程:2

在浏览器本地存储或会话存储中缓存数据以发送数据 从一个页面到另一个页面再次在这里为不同的浏览器本地 存储或会话存储将在this link 上提及

流程:3

由于我使用 java 作为服务器端语言,我可以发送通知 obj 在对服务器的请求中,可以使用 servlet session 来存储通知 ,从一个页面切换到另一个页面时,加载一个发送给我的 servlet 在页面仍在加载时响应的通知详细信息对象这不是>考虑缓存,因为每次新页面加载时我都必须加载和存储通知数据。

这里有什么更好的解决方案? ,来自流 1 和 2,因为有 security issues 而流 3 更安全,但会影响我的带宽数据限制。

编辑(我的原因是流程 1 和流程 2 存在安全问题)

folw-1: 使用查询字符串传递数据我们很容易实现,但是页面之间传递的每个数据(以查询字符串的形式)在 url 中都是可见的,这违背了我们的项目需求

流-2 对于 flow-2,参考 Nicholas C 给出的这个链接描述。Zakas 会话存储的安全问题如下

"您登录网站查看您的邮件,邮件应用程序会保存信息 关于 sessionStorage 中的那些电子邮件。 然后,您将选项卡切换到另一个窗口,您可以在其中注销 正在读取您的电子邮件的帐户。这是很有可能的 使用 Yahoo! 等单点登录 ID 时身份证(但请注意 这只是一个例子,Yahoo!实际上并没有这样做)。然后是你 切换回电子邮件选项卡,您的数据仍然存在 sessionStorage 即使您已注销。点击各种 电子邮件从 sessionStorage 中检索数据并显示它。 您现在正在注销时查看个人信息。”

我的问题如下

如何缓存Ajax调用获取的通知数据?有吗? 除了上面的流量还有其他方式!!!

提前致谢

【问题讨论】:

  • 您必须解释流程 1 和 2 的安全问题(如:从您的角度来看)。没有什么是非黑即白的;如果你去购物,把你家的门打开是一个安全问题,但如果你站在门前,可以这么说,这不是问题。无论如何,我都赞成这个问题,因为如果你改进它以减少固执己见,这有可能成为当今时代一个非常相关的问题。

标签: java javascript html session


【解决方案1】:

流程 2,但使用本地存储。 不限于窗口,使用如下所示的广播事件:http://bens.me.uk/2013/localstorage-inter-window-messaging(打开演示两次以查看它的实际效果)

这里的JS代码: http://blog.fastmail.fm/2012/11/26/inter-tab-communication-using-local-storage/

在注销事件时,您可以通过完全相同的窗口间消息来清除本地存储,因此 storage.clear() 会在任何地方清除。即 OnClick -> storage.clear() -> POST/GO TO 注销请求

然后,您可以在服务器上设置数据库中的变量,以判断他们是否已登录,是否立即发送数据,否则重定向到登录页面(用于从可能无法注销的不同寡妇重新加载通知已经影响了当前的视图,所以快速查看更改检查,简单检查几乎没有带宽使用,如果正确完成,可能需要几个字节)。

还可以添加检查是否是最后一个窗口,然后在卸载时清除本地存储。

对于以清晰视图字符串存储的数据,在存储之前使用加密算法,即通过对随机数进行一些计算来改变所有二进制数据,然后将二进制表示存储在普通视图中。 不是最安全的,但人类无法理解。 另外,在一天结束时,如果有人想从本地存储中窃取您的数据,那么用户需要登录,并且“黑客”需要有一个 JS 文件,知道它在寻找什么,因此非常有针对性。

因此,通过使 int 更改为 userid * random int used / last names 二进制表示之类的东西来改变它。所以它是完全不同的,因此必须知道密钥计算的每个部分。

【讨论】:

  • 谢谢你的回答千差万别,真的很有帮助,你能给我任何加密算法的例子吗,我可以用它通过对随机数的一些计算来改变所有的二进制数据!
  • 看这里:midnight-coding.com/2014/05/… 然后你可以通过使用 javascripts Math.Random() 来获得一个随机数,将它存储为一个开放密钥,但也许该密钥由用户 ID 前缀,即 123442454 -2948 其中 2948 是我们公开创建和存储的另一个随机数。然后,实际用于获取用于更改二进制文件的随机数的那个被公开存储,因为它必须附加到用户 ID 才能在再次发生字符串转换之前实际获取解码回二进制文件的密钥。
  • 即打开字符串,追加:2948 -> {{UserID}}-2948 : 209375 -> First Name : ((Str to Binary * 209375)) 等。然后反向解密。跨度>
  • 感谢上面的链接,在这里您建议为每个用户生成一个随机数,将其存储在数据库中,并且每次我想访问本地存储[用于检索通知消息返回]附加随机数开放密钥,在这种情况下,如果有人弄清楚一个用户的随机数是什么,他/她可以轻松地将二进制解密为字​​符串,我的问题是如何使这个过程更安全,如果我生成新的随机数 [作为key] 在服务器上会更安全吗??
  • 是的可能,所以如果您知道服务器上的随机密钥,您可以发送加密数据,然后使用公钥在用户端解密。因此,也许可以将密码二进制形式作为公钥并使用 RSA 类型的加密方法。因此,从密码二进制形式或某种数字形式,向后工作以获取您在服务器中用于传输加密数据的私钥。但是您仍然必须将密码数字形式存储在浏览器会话中。但在不影响用户体验的情况下,您可以获得最安全的信息,即每次他们想查看数据时都要输入密码。
猜你喜欢
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多