在使用任何框架之前,我使用PHP中的$_SESSION
跟踪登录用户,我想知道是否有其他方法可以更优雅的方式完成同样的事情。
我在stackoverflow上看到an answer看起来很有趣。
我听说过一些名为令牌的东西(我理解为字符串),我在网址中注意到了它,但我想知道:
据我所知,用户可以限制正在创建的cookie。
...我想知道是否(例如使用ZF2)我想限制用户在某些页面上的访问权限,如果他没有登录。我以为我可以将逻辑封装在服务类中。看起来非常多余的是,在每个模块中,我想要使用该服务,我必须检查isUserLoggedIn()
之类的内容并决定做什么
(如果没有登录,可能会重定向到登录页面),这看起来不是很干。
答案 0 :(得分:2)
首先:将登录令牌放入网址(GET-Method)是您可以做的最糟糕的事情。
如果其他人知道URL(例如,当用户共享链接或本地网络中的某人扫描请求时),他将自动登录,而不知道登录凭据。如果您使用HTTPS,则将其作为POST发送将提高安全性。
但通常:是 - 令牌基本上只是一个随机字符串。因此生成令牌非常简单 - 您只需要确保它们是唯一的。
根据您的想法将登录令牌保存为cookie,您就在正确的轨道上但是:这正是SESSION所做的。会话是用于标识用户的令牌。
您提到的帖子基本上是对此的补充。会话自然不会做任何其他事情来保存与用户相关的信息(或者更具体地说:他的会话ID)。在帖子中,他们通过添加超时(在XX秒后自动注销)和轮询策略手动为基于会话的授权添加功能(用户需要确认他每隔X秒仍然活着 - 否则他将被注销)。 / p>
当然,您也可以在数据库中保存登录/会话信息。因此,您可以通过这种方式手动保存令牌($ _SESSION中的session ID)和相关信息。但默认情况下,PHP会自行处理$ SESSION的“保存” - 正如您所见here。因此,如果不需要创建自己的会话处理,我建议使用PHP自己的会话。
对于 ZF2问题,我还建议您使用ACL。如果您不想检查每个页面上的权限,您可以尝试扩展路由类或导入一个简单的“帮助器”函数,该函数执行类似上面帖子中描述的操作。它从“全局”检查ACL的权限,并为每个页面动态处理它们。因此,您不需要为每个要“锁定”的页面编写代码(仅限acl)。
希望这有帮助! ;)
答案 1 :(得分:0)
我不确定这是否是您想要的,但有一些调用ACL(访问控制级别),您可以定义角色,所以您的意思是所有'访客'将被重定向到登录页面。
http://ivangospodinow.com/zend-framework-2-acl-setup-in-5-minutes-tutorial/