Javascript 在angular.js应用程序中维护页面刷新时的客户端页面状态

Javascript 在angular.js应用程序中维护页面刷新时的客户端页面状态,javascript,jquery,angularjs,single-page-application,Javascript,Jquery,Angularjs,Single Page Application,我正在使用angular.js构建一个单页应用程序,我面临着这个问题,我无法找到正确的答案 当我们在angular应用程序中进行整页刷新时,我们应该如何检查用户是否仍有有效会话??状态提供程序或UI路由器只是将url路由到请求的页面,但是如果用户的会话已过期怎么办 我想到的一件事是使用一个服务并在那里存储一个布尔值,一旦用户登录,在每次页面刷新或状态更改时,我们检查这个布尔值并将用户重定向到登录页面,如果这个值为false。但是,如果我们刷新,这个布尔值就会重置 考虑将这个键值存储在cookie

我正在使用angular.js构建一个单页应用程序,我面临着这个问题,我无法找到正确的答案

当我们在angular应用程序中进行整页刷新时,我们应该如何检查用户是否仍有有效会话??状态提供程序或UI路由器只是将url路由到请求的页面,但是如果用户的会话已过期怎么办

我想到的一件事是使用一个服务并在那里存储一个布尔值,一旦用户登录,在每次页面刷新或状态更改时,我们检查这个布尔值并将用户重定向到登录页面,如果这个值为false。但是,如果我们刷新,这个布尔值就会重置

考虑将这个键值存储在cookie或html本地存储中,但是这些值存储在这里有多安全呢。有人可以重置此布尔值以访问页面


请让我知道。

要使客户端应用程序安全,您需要使用某种服务器。将值存储在cookie或本地存储中不会有任何好处,因为这些值可能会被用户操纵(浏览器上的所有其他内容也是如此)

不确定您有哪些可用选项,但我建议您研究一下Nodejs/Expressjs/Passportjs——这是一个非常棒的组合,在这里提供了非常好的支持


一旦你在这方面取得了进展,你就可以提出一个更集中的问题。

我认为你在这里混淆了一些概念

One-是对服务器的用户身份验证。它必须是服务器,否则仅客户端应用程序中的用户会话概念是无用的。认证cookie(通常)促进了这一点。cookie是提供给用户的安全令牌,由服务器上的某个秘密签名。cookie包含登录名和过期时间等内容。服务器会在浏览器发出的每个请求中验证cookie

Two-是客户端应用程序中保持的良好用户体验。我的意思是,如果您没有检查cookie是否过期,那么您对服务器的ajax调用将(并且应该)以HTTP 401失败-未经授权。您可能希望阻止这种情况,并让您的应用程序抢先重定向到登录页面,或者如果适用,请求刷新安全令牌

那么这一切意味着什么呢

  • 在服务器上强制执行身份验证
  • 创建一个loginService,用于检查cookie中的会话过期情况,或者检查用于用户身份验证的任何其他内容
  • 使用或的
    resolve
    参数使登录信息可供控制器使用。下面是一个你可能会觉得有用的问题

  • 后端有jboss服务器,它向我发送有效的jsessionId。这对于XHR请求很有效,但在角度状态或路由更改时,我是否应该使用jession调用后端以检查用户是否有有效会话?要导航到此新页面?您应该检查每个请求是否有有效会话。是的,它归结为检查每个请求的会话。您的答案总结得非常好。谢谢