具有本地存储的会话

Posted

技术标签:

【中文标题】具有本地存储的会话【英文标题】:Sessions with local storage 【发布时间】:2012-05-05 18:28:51 【问题描述】:

我对 html5 的 javascript 和本地存储使用非常陌生。我目前在我的站点中使用 php 会话,并希望转移到本地存储,因为此时我正在使用 cookie 来更新会话。

我知道 localstorage 是一个客户端函数,而不是像 PHP 这样的服务器端函数,所以这让我很难弄清楚如何处理这个问题。

我要做的就是设置 localstorage 值(我已经完成了),但我需要能够将它们传递回 PHP 以将它们重新建立为 SESSION 变量(我必须这样做,因为我的网站有一次超过 100 个页面和 50 个以上的会话变量,所以我想简单地使用本地存储来重新生成会话变量而不是 cookie。

如果有人可以帮助我解决这个问题,将不胜感激。谢谢。

【问题讨论】:

你确定要这个吗?客户端可以轻松更改本地存储。不要依赖客户告诉您设置会话的内容。请改用数据库。 我同意@Truth - 我看不出这样做的目的,或者除了让客户篡改数据之外,你可能认为这样做会获得什么? 【参考方案1】:

您将需要使用 ajax 或某种形式的方式来联系您的服务器以允许这样做。您可以访问该本地存储的唯一方法是使用客户端脚本(javascript),它反过来可以用它来做事。我不知道ajax,但你应该研究一下。我也同意@Truth,本地存储很好,特别是如果您不想使用 cookie,但唯一的好处是用户可以离线使用该本地存储。所以真的没有真正的理由你应该这样做。如果您使用 cookie,则可以通过脚本访问该信息。另一方面,您可以使用本地存储来替代在用户浏览器上禁用 cookie。

【讨论】:

我有用户抱怨“添加到主屏幕”网络应用程序没有让他们在我们的 PHP.ini 和 cookie 限制中设定的时间内保持登录状态。通过网站它确实有效,但我的客户坚持 webapp 也遵循这些限制,所以从谷歌搜索几个小时后,我发现很多在我的位置上选择使用本地存储...@truth - 你说使用数据库?我正在使用 mysql 在登录时检查用户的凭据,我如何使用数据库来保持会话处于活动状态?它会在 webapp 场景中工作吗?你让我对这个可能的解决方案很感兴趣。请分享。 :) 老实说,我不确定为什么 cookie 设置不正确,但据我所知,您应该始终自己设置。至于如何保持与 cookie 和数据库的会话,请创建一个经过良好哈希处理的随机字符串,当用户想说登录时将其放入数据库和 cookie 中。如果它们匹配,你就可以开始了。使用本地存储,它也是一样的,除了再次,您需要使用 Ajax 或其他可以与您的服务器通信的脚本形式与服务器通信,以查看用户是否具有该随机散列字符串。请注意可能的 cookie/本地存储被盗。 我正在设置 cookie,它在浏览器中的工作方式应有尽有。一旦您“添加到主屏幕”并通过这种方式加载,它就会忽略 cookie。从我在其他论坛和此处阅读的内容来看,这很常见,而 localstorage 是解决方法。随机散列会是 PHP SESSION ID 吗? 不。随机的,可能是日期时间与其他无用信息相结合。我所做的是制作一个随机字符串生成器,然后对其进行哈希处理。实际上,您甚至不需要散列,只要它是随机的。但是哈希使它更加随机,所以不会受到伤害。只要不是敏感数据,由您决定。但请注意,您还应该存储用户 IP 以确保存储的字符串不会被盗,从而让其他人访问该用户配置文件。如果您不保存敏感数据,这没什么大不了的,但这是一种很好的做法。 谢谢!我已经开始研究这个了,我只是不知道如何称呼它,因为 webApp 似乎忽略了 cookie,它们用于重新生成会话。我会给我的客户一个 etch n 草图,并告诉他们除非你摇晃它,否则关于那个东西的会话不会过期! :P

以上是关于具有本地存储的会话的主要内容,如果未能解决你的问题,请参考以下文章

Web存储使用详解(本地存储会话存储)

原生JavaScript实现本地存储(localStorage)和会话存储(sessionStorage)

可以禁用会话存储/本地存储并启用 Cookies 吗?

AngularJS 中会话存储、本地存储和 Cookie 的区别

本地存储和云存储之间的区别

本地存储(Local Storage) 和 会话存储(Session Storage)