如何在 Angular 中生成服务器端 session 变量?
How to generate a server side session variable in Angular?
我已经对我自己的 angular 应用程序进行了一些修改。
首先,我有一个菜单导航列表,其中包含 PUBLIC、MEMBER、ADMIN 访问角色。
登录后,我将角色 'MEMBER' 存储给用户,他可以在其中查看 PUBLIC 和 MEMBER 链接。
(使用 Chrome)但后来我打开
Developer Tools > Application > Storage > Session Storage
将 'role' 变量从 'MEMBER' 修改为 'ADMIN',我可以查看秘密管理链接。
这不是编码结构问题,而是 'how to store session variable in secured ways'。
在那之前,我认为PHP的session变量等同于'Session Storage',社区说SESSION不是用户的change-able .
然后我现在了解到,SESSION有两种类型,服务器端和客户端session。对于标准 angular 应用程序,存储 'email'、'role' 有点交易但不能被用户修改的最佳方式是什么?
我在 session 中需要它们的原因是它们可以很容易地呼唤到
Role - Show/Hide navigation menu items
Email - to perform SQL filter, SELECT fields FROM Record WHERE email=Session.Email
感谢您的建议。
您可以将会话值作为变量存储在堆中。您可以创建一个会话服务,它将处理会话变量并将其存储在地图中。
示例项目,
https://stackblitz.com/edit/angular-ivy-oq4utv
使用这种方法,如果用户 refreshes/reloads 页面,会话值将会丢失,您将不得不在每个页面上重新设置所有会话值 refresh/reloads。
浏览器上的所有内容都可以由用户修改。因此,在执行操作之前,您还需要验证您在服务器上选择的任何会话机制。
例如,您可以使用 Json Web 令牌 (JWT)。
当您使用 API 登录时,API 会生成一个安全令牌,该令牌会在身份验证成功后发送给客户端。该安全令牌已加密并且可以包含任何信息,例如用户 ID 和角色。
该令牌随后存储在浏览器中(在
本地存储、会话存储或 cookie)。 Cookies 是最安全的选项,允许身份验证与 angular universal
一起使用
令牌随每个 API 调用传递。如果您使用 cookie,它们将自动传递。如果使用本地或会话存储,您可以创建一个 HttpInterceptor
以将令牌添加到请求中。
然后 API 在执行操作之前验证令牌是否有效以及用户角色。
因此,即使您将用户角色存储在客户端,如果客户端修改该角色,该操作也不会在 API 端执行,这是最重要的。
Web 浏览器有 cookie,在 PHP 的情况下,默认从 PHPSESSID cookie 跟踪它。
你可以在这里阅读
https://www.php.net/manual/en/book.session.php
和这里
https://www.php.net/manual/en/session.idpassing.php
Chrome LocalStorage 和 SessionStorage 是与 PHP 会话无关的本地 HTML5 功能
https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
对于你的问题,我想你可能想错了。您希望服务器向客户端提供此类信息,而不是相反。
如果您使用 Angular 和 API 它应该可以 RESTfully 工作,并且使用 PHP 会话不是可扩展的也不可靠的解决方案。
https://en.wikipedia.org/wiki/Representational_state_transfer
如果您需要验证用户详细信息,客户端应发送服务器可以验证的令牌。如果你想在客户端缓存用户详细信息,登录后 API 可以 return 用户是谁的详细信息可以保存到 HTML5 SessionStorage
我已经对我自己的 angular 应用程序进行了一些修改。 首先,我有一个菜单导航列表,其中包含 PUBLIC、MEMBER、ADMIN 访问角色。 登录后,我将角色 'MEMBER' 存储给用户,他可以在其中查看 PUBLIC 和 MEMBER 链接。 (使用 Chrome)但后来我打开
Developer Tools > Application > Storage > Session Storage
将 'role' 变量从 'MEMBER' 修改为 'ADMIN',我可以查看秘密管理链接。
这不是编码结构问题,而是 'how to store session variable in secured ways'。 在那之前,我认为PHP的session变量等同于'Session Storage',社区说SESSION不是用户的change-able .
然后我现在了解到,SESSION有两种类型,服务器端和客户端session。对于标准 angular 应用程序,存储 'email'、'role' 有点交易但不能被用户修改的最佳方式是什么? 我在 session 中需要它们的原因是它们可以很容易地呼唤到
Role - Show/Hide navigation menu items
Email - to perform SQL filter, SELECT fields FROM Record WHERE email=Session.Email
感谢您的建议。
您可以将会话值作为变量存储在堆中。您可以创建一个会话服务,它将处理会话变量并将其存储在地图中。
示例项目, https://stackblitz.com/edit/angular-ivy-oq4utv
使用这种方法,如果用户 refreshes/reloads 页面,会话值将会丢失,您将不得不在每个页面上重新设置所有会话值 refresh/reloads。
浏览器上的所有内容都可以由用户修改。因此,在执行操作之前,您还需要验证您在服务器上选择的任何会话机制。
例如,您可以使用 Json Web 令牌 (JWT)。
当您使用 API 登录时,API 会生成一个安全令牌,该令牌会在身份验证成功后发送给客户端。该安全令牌已加密并且可以包含任何信息,例如用户 ID 和角色。
该令牌随后存储在浏览器中(在 本地存储、会话存储或 cookie)。 Cookies 是最安全的选项,允许身份验证与 angular universal
一起使用
令牌随每个 API 调用传递。如果您使用 cookie,它们将自动传递。如果使用本地或会话存储,您可以创建一个
HttpInterceptor
以将令牌添加到请求中。然后 API 在执行操作之前验证令牌是否有效以及用户角色。
因此,即使您将用户角色存储在客户端,如果客户端修改该角色,该操作也不会在 API 端执行,这是最重要的。
Web 浏览器有 cookie,在 PHP 的情况下,默认从 PHPSESSID cookie 跟踪它。
你可以在这里阅读 https://www.php.net/manual/en/book.session.php 和这里 https://www.php.net/manual/en/session.idpassing.php
Chrome LocalStorage 和 SessionStorage 是与 PHP 会话无关的本地 HTML5 功能 https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
对于你的问题,我想你可能想错了。您希望服务器向客户端提供此类信息,而不是相反。
如果您使用 Angular 和 API 它应该可以 RESTfully 工作,并且使用 PHP 会话不是可扩展的也不可靠的解决方案。 https://en.wikipedia.org/wiki/Representational_state_transfer
如果您需要验证用户详细信息,客户端应发送服务器可以验证的令牌。如果你想在客户端缓存用户详细信息,登录后 API 可以 return 用户是谁的详细信息可以保存到 HTML5 SessionStorage