某些网站中的隐藏身份验证

Hidden authentication in some websites

我发现有些网站即使没有用户登录也有某种身份验证。以 plunker 为例,即使是未登录的用户也可以 freeze 一个片段,这样其他用户不能修改;而用户自己总是可以修改代码段,即使他在另一个浏览器选项卡中打开 link。

我目前的解决方案是在用户模型中添加一个 type 字段(即 anonymnormal)。然后,每次没有正常用户登录时,我系统地生成一个唯一的随机 ID,以 anonym 用户身份注册并登录。它有效,但缺点是我的数据库中有很多 anonym 用户。

有没有人有更好的解决方案?有没有"standard"实现这种隐藏认证的方法?

我认为您正在寻找的方法称为会话 ID。当您另存为匿名用户时,Web 应用程序会创建一个会话,其会话 ID 用于通过 link 识别用户。例如,在 plnkr 上,它将类似于 https://plnkr.co/edit/session_id?p=catalogue,其中 session_id 是某种哈希。

为了冻结片段,将会话 ID 写入带有标志的 cookie 中,例如表示状态已冻结。如果您在 Chrome 中冻结它并在 Chrome 的私有 window 或在同一台计算机上的 Firefox 中打开它,您将无法解冻它。它的行为方式与其他没有 cookie 的用户相同。事实上,使用 cookie 的会话哈希,而不是任何用户标识是 better for security reasons.

现在这种方法在某种意义上并不比创建匿名用户好多少——您仍然必须将会话记录保存到数据库中才能通过 link 打开会话上下文。事实上,如果假设用户出现在代码中的许多用例和位置中,那么在您的情况下完全按照您所做的操作可能会更简单。

然而,在许多情况下,会话与用户的分离很有意义,因为它简化了在登录或注册后保持会话状态。假设某些网上商店会在您注册后清空您的购物篮,这会造成相当大的挫败感,尤其是当您将几件小物品放入其中时,您现在必须再次找到并放回去。那些没有会话或者在注册或登录时没有正确使用它们。

否则,正如我所写的,它几乎是一样的,你必须处理许多污染数据库的匿名会话,除非你有某种明智的保留策略,这取决于你的用例。比如说,一个类似于 plnkr.co 的网站,用于共享代码片段,并且 post 它们在 Whosebug 等网站上应该更好地保持这些会话,同时有用户访问这些会话至少一次一年。所以会话应该有访问日期和政策是它早于 1 年。

希望对您有所帮助。

我已经使用本地存储完成了类似的操作。它允许您在浏览器上存储数据。然后用户可以打开选项卡,完全关闭浏览器并重新打开等,数据仍然存在。然后它似乎是为他们保存的,但实际上它只是存储在他们的浏览器上。

这不会让其他人看到他们做了什么,所以不确定这是否正是您所追求的。

我将它们包装在函数中,以防我以后选择更改它们,就像这样

StoreLocalVariable: function (key, value) {
        localStorage.setItem(key, value);
},

GetLocalVariable: function (key) {
        return localStorage.getItem(key);
},

一些信息,包括兼容性 https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API