我想登录到Laravel5编写的RESTful后端服务器,单页前端应用程序利用Polymer的自定义元素。如何在Polymer SPA中保留后端会话信息
在这个系统中,持久性(CRUD)层位于服务器中。所以,认证应该在服务器端响应客户端的api请求。当请求有效时,服务器以JSON格式返回User对象,包括用户在客户端的访问控制角色。
在这里,我的问题是我如何保持会话,即使用户刷新前端页面?谢谢。
我想登录到Laravel5编写的RESTful后端服务器,单页前端应用程序利用Polymer的自定义元素。如何在Polymer SPA中保留后端会话信息
在这个系统中,持久性(CRUD)层位于服务器中。所以,认证应该在服务器端响应客户端的api请求。当请求有效时,服务器以JSON格式返回User对象,包括用户在客户端的访问控制角色。
在这里,我的问题是我如何保持会话,即使用户刷新前端页面?谢谢。
这是聚合物以外的问题,甚至只是单页面应用程序。问题在于如何在浏览器中保留会话信息。使用SPA时,它会更容易一些,因为您可以将身份验证令牌保存在内存中,但传统的Web应用程序自一开始就有此问题。
你有你需要做两件事情:
有几种方法可以做客户端存储。目前最常见的是饼干。由于浏览器存储它们时没有太费劲,只要访问cookie注册的域名就可以显示它们,这很容易实现。许多客户端和服务器端auth库都是围绕它们构建的。
替代方案是html5本地存储。根据您的目标浏览器和支持,您可以考虑使用它。
还有一些方法可以使用URL参数进行播放,但当有人切换页面时,您可能会失去它。它可以工作,但我倾向于避免这种情况。
我还没有看到任何直接处理cookie的组件,但建立它不应该太难。
这是我用于最近的应用程序的cookie管理代码的要点。随意包装它建立一个cookie组件管理..只要你共享相同!
https://gist.github.com/deitch/dea1a3a752d54dc0d00a
UPDATE:
component.kitchen在这里有一个存储组件http://component.kitchen/components/TylerGarlick/core-resource-storage
的最简单方法)。 PHP会将用户信息存储在服务器上,并自动生成一个浏览器随任何请求发送的cookie。使用一台没有负载平衡的服务器,会话数据是本地的,速度非常快。
谢谢!你是对的。我发现,即使是api请求,一旦登录到服务中,会话变量将通过COOKIE传递,并在Laravel 5中保留两个小时。因此,只要有后续的api请求服务器在两个小时内,COOKIE延长其使用寿命。 – appkr 2015-04-02 13:05:49
但是,我也发现我写的题目很差。它应该类似于“在刷新客户端后保持从后端返回的用户数据”。这意味着,就api请求而言,一旦客户端得到认证,就没有限制做出另一个api请求。但是从服务器返回的用户对象不见了。 – appkr 2015-04-02 13:12:43
我想有两种简单的方法可以做到这一点: - 服务器端:如果你的服务器主要是做REST请求,你可以在你的html页面直接在onload事件中发送用户对象,如果用户连接的话:(在你的内部html模板,使用类似window.onload = function(){user = {'从服务器生成的JS代码是一个用户连接'};} 我不知道Laravel,但如果你有某种模板引擎它可以在用户连接的每个HTML页面上显示一些JS,它可以工作在 - 客户端有会话存储(仅限HTML5浏览器)。详细信息请参阅deitch msg – BLASTOR 2015-04-03 22:06:26
感谢您的解释和建议。 我明白了。 - ** option1 **:当index.html被命中以重新填充用户对象*时(只有当它被刷新命中时),客户端必须发出api请求。 - **选项2 **:客户端必须将用户对象存储在特定时间的某个地方。 – appkr 2015-04-02 13:26:16
很高兴。很多,是的。我必须在接下来的几周内将一个Angular应用程序转换为Polymer,客户端存储是其中的重要组成部分,因此我们将看到它在现实世界中的表现如何。 – deitch 2015-04-02 13:50:31