PHP的基本身份验证和会话管理库?

7

我知道类似这样的问题已经被问了很多次,但并不完全是本问题。如果我忽略了一个明显的重复,请原谅我。

我自己编写了一个用户/会话管理类,它是许多我的Web应用程序核心的一部分,其起源可以追溯到2002年。我决定现在是时候进行根本性的重写或者最好引入一个现成的标准库。

我对该库的要求如下:

  • 面向对象,代码干净,优秀
  • 完整的会话管理:对session_start()等的包装器
  • 最好提供各种存储方法(PHP Standard /tmp、基于数据库的)
  • 最好能够连接到不同类型的用户数据存储,但mySQL也可以
  • 最好提供支持OpenID的方便函数,但这只是一种花哨的想法,目前没有要求
  • 方法:验证会话、获取用户数据、获取会话数据、登录用户、注销用户
  • 设置:会话生命周期、密码加密
  • 必须是开源的

如果它非常通用,则用户管理API或与周围应用程序的用户管理的通用连接器也很好:

  • 创建/更新/删除用户记录
  • 获取和修改当前登录用户的数据

这是如此基础和安全相关,以至于我希望有一个标准的解决方案,但我不知道任何一个,所有大型CMS和博客似乎都在自己开发。

我的两个问题:

  • 您是否知道这样一个作为通用、独立库的组件?

  • 具有深入了解Zend Framework的人能否告诉我是否可以使用Zend_auth和/或Zend_session“独立”地作为大型应用程序的核心,而与ZF无关,而不会遇到麻烦?


https://github.com/auraphp/Aura.Auth。如果需要,您可以使用https://github.com/auraphp/Aura.Session。可能会帮助其他人。 - Hari K T
1
你可能想要查看 https://github.com/delight-im/PHP-Auth,它既不依赖于框架,也不依赖于数据库。 - caw
4个回答

6

2
有深入了解Zend Framework的人能否告诉我,是否可以在与ZF无关的大型应用程序的核心中独立使用Zend_auth和/或Zend_session,而不会遇到问题?
我对Zend Framework没有深入了解,但我已经使用过各种组件(例如Zend_Search)而没有创建Zend_Application对象或使用MVC框架,我相信库的其余部分也是完全模块化设计的。上次我查看Zend_Session代码时,我没有发现任何包含在Zend/Session/之外的内容。一个快速谷歌似乎证实了这一点,Zend FAQ也指出:
ZF是一个组件库还是一个框架?
简单的回答是:两者兼备。Zend Framework提供了大多数Web应用程序所需的所有组件。但是,Zend Framework组件也是松散耦合的,这使得在Web应用程序中仅使用几个组件甚至与其他框架一起使用变得容易!通过使用这种随意架构,我们正在实现在更大型的框架中通常发现的功能。事实上,我们目前正在为1.8版本开发一个工具组件,它将使使用ZF组件构建应用程序变得更加简单,但不会牺牲现有ZF组件的随意使用性质。这证明了Zend Framework的随意使用架构的价值,即工具组件本身可以作为独立组件使用。
当不使用MVC框架时,我唯一需要做的事情就是将安装Zend Framework的目录添加到包含路径中,因为Zend库中有许多包含文件。文档没有记录不使用Zend Autoloader时需要的包含内容,但由于所有内容都使用PEAR类命名方案,因此可以从您正在使用的类名称中推断出来(因此类Foo_Bar_File将需要您包括Foo/Bar/File.php)。

谢谢你的答案,Yacoby。我觉得我会深入研究并尝试一下ZF。 - Pekka

1

感谢提供 openID 链接。关于自己编写:一个文档完备的标准库应该很容易理解。我希望有这样的标准库存在。 - Pekka

0

我的理解是,没有标准库是因为没有对用户的标准定义。

在我的一些应用程序中,用户只需登录即可完成操作。在其他应用程序中,用户是公司的一部分,他们的权限和数据访问受到该公司的限制和公司支付的订阅级别的限制。在其他应用程序中,一些用户是具有访问所有内容的管理员,一些用户是具有访问某些数据(行级别)的管理员,而其他用户是这些管理员的客户,只能访问自己的数据。有些用户与公司/客户绑定,而其他用户则没有。有些用户只是用户名和密码,而其他用户则是一个大对象图,包括客户端、订单历史记录、报告偏好、评论等。

也许我错了,也许有一种干净的方式可以将所有这些要求抽象成一个系统,而不需要五层子类化和一千个数据库查询来登录某个人。但我还没有找到它。


我觉得你误解了我的意思。我并没有在谈论任何类型的访问控制管理。我只是在谈论一些基本事实:用户登录,用户退出。也许,用户更改他们的密码。没有别的了。当然我可能是错的,但从我的经验来看,这是非常低层次的,应该相当标准化。 - Pekka
我想我还是不理解。如果登录用户不能给你访问控制,那么登录用户的意义何在?这不就是“已登录”的含义吗? - Scott Saunders
我只需要一个通用的API,基本上告诉我谁是已登录用户(即使用哪些凭据登录)。其余部分(=访问控制,检查他们是否被允许执行请求的操作等)将由Web应用程序处理。该API仅知道ID为123的用户已登录系统。它可以对此用户进行操作(登录,注销...),但不能做其他任何事情。 - Pekka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接