如何在Angular中生成服务器端会话变量?

如何在Angular中生成服务器端会话变量?,angular,session,session-storage,Angular,Session,Session Storage,我已经完成了对我自己的angular应用程序的一点修改。 首先,我有一个菜单导航列表,包含公共、成员、管理员访问角色。 登录后,我将角色“MEMBER”存储给用户,用户可以在其中查看公共和成员链接。 (使用Chrome)但后来我打开了 Developer Tools>Application>Storage>Session Storage 操纵“角色”变量从“成员”到“管理员”,我可以查看机密管理员链接 这不是一个编码结构问题,而是“如何以安全的方式存储会话变量”。 在此之前,我认为PHP的ses

我已经完成了对我自己的angular应用程序的一点修改。 首先,我有一个菜单导航列表,包含公共、成员、管理员访问角色。 登录后,我将角色“MEMBER”存储给用户,用户可以在其中查看公共和成员链接。 (使用Chrome)但后来我打开了

Developer Tools>Application>Storage>Session Storage

操纵“角色”变量从“成员”到“管理员”,我可以查看机密管理员链接

这不是一个编码结构问题,而是“如何以安全的方式存储会话变量”。 在此之前,我认为PHP的session变量相当于“session Storage”,社区称session不能由用户更改

现在我了解到,有两种类型的会话,服务器端会话和客户端会话。对于一个标准的angular应用程序,什么是存储“电子邮件”、“角色”之类的交易但用户无法修改的最佳方式? 我需要它们的原因是它们可以很容易地被召唤出来

Role - Show/Hide navigation menu items
Email - to perform SQL filter, SELECT fields FROM Record WHERE email=Session.Email

谢谢您的建议。

您可以将会话值作为变量存储在heap中。您可以创建一个会话服务,它将处理会话变量并将其存储在映射中

样本项目,


使用这种方法,如果用户刷新/重新加载页面,会话值将丢失,您必须在每次刷新/重新加载页面时重新设置所有会话值。

用户可以修改浏览器上的所有内容。因此,在执行操作之前,您还需要验证您在服务器上选择的任何会话机制

例如,您可以使用Json Web令牌(JWT)

  • 当您使用API登录时,API将生成一个安全令牌,该令牌在成功身份验证时发送给客户端。该安全令牌是加密的,可以包含任何信息,例如用户id和角色

  • 然后,该令牌存储在浏览器上(在 本地存储、会话存储或cookie)。Cookie是最安全的选项,允许身份验证与angular universal一起工作

  • 令牌将沿着每个API调用传递。如果您正在使用cookies,它们将自动传递。如果使用本地或会话存储,您可以创建一个
    HttpInterceptor
    ,将令牌添加到请求中

  • 然后,API在执行操作之前验证令牌是否有效以及用户角色是否正确


  • 因此,即使您将客户端存储为用户角色,并且客户端修改了该角色,操作也不会在API端执行,这是最重要的。

    web浏览器具有cookie,在PHP默认情况下,cookie会从PHPSESSID cookie跟踪它

    你可以在这里读到 这里呢

    Chrome LocalStorage和SessionStorage是与PHP会话无关的本地HTML5功能

    对于你的问题,我想你可能想得不对。您希望服务器向客户端提供此类信息,而不是相反

    如果您使用的是Angular和API,那么它应该以REST方式工作,而使用PHP会话不是一个可伸缩的、也不可靠的解决方案。

    如果需要验证用户详细信息,客户机应该发送一个令牌,服务器可以验证该令牌。如果您希望在客户端缓存用户详细信息,那么在登录后,API可以返回用户的详细信息,这些信息可以保存到HTML5会话存储中