2010-02-06 126 views
4

我想为Java应用程序和PHP应用程序使用Java EE应用程序服务器(GlassFish 3)作为SSO服务。如果用户通过GlassFish进行身份验证,他也应该登录到PHP应用程序。与PHP共享Servlet会话

是否有一个与PHP共享Servlet会话(更精确:身份验证状态)的最佳实践?

回答

1

看一看PHP/Java Integration。您可以将PHP集成到servlet环境中,或让PHP调用Java。现在我不能100%确定这将专门解决您的问题,并且整合被认为是实验性的。

你可能最好做的是使用别的东西来共享会话数据。像memcache一样。 Java和PHP都可以自由地与memcache通信。这将是一个更加强大的解决方案。

+0

还是看Caucho的栓皮栎的Java实现的PHP制作集成更容易。 – rsp 2010-02-06 17:51:23

1

我有连接PHP和Java应用程序服务器没有经验,但在整合一般:

一种常见的方式做单点登录上阅读会话标识(如饼干由Java服务器设置)在PHP脚本中传递给应用程序服务器(例如通过命令行,通过创建HTTP调用或共享缓存实例)并获取身份验证状态。

如果这是不可能的,例如因为这些服务在不同的域上运行,所以您可以在第一次调用它时将您的应用服务器的会话ID传递给PHP应用程序。然后,PHP应用程序将创建自己的会话,并将来自应用程序服务器的会话ID存储在其中。如上所述,应用服务器会话的内部验证将工作。

如果您不仅需要交换“登录/未登录”标志,还可以考虑使用session_set_save_handler()来替换PHP的标准会话处理。您的自定义会话功能可以将会话数据存储到文件中,而不是将会话数据存储到文件中,从您的应用服务器获取数据,该数据可以预先填充会话数据,如身份验证状态,用户名等。这将允许进行一些简单的应用程序间通信。

当然,首先检查由cletus提到的内置Java/PHP集成函数是否已经不能实现。

1

我不知道最佳实践...但通常如果它的工作原理并不昂贵且不危害安全性,那么这可能是一种可接受的做法。

当用户访问一个没有php会话的php页面时,该php页面会重定向到一个特定的jsp页面。 jsp页面将查看用户是否有活动会话。如果不是,jsp页面将允许用户登录.jsp页面将重定向到一个特定的php页面,并传递诸如身份验证令牌等内容,以及原始页面的url。 php页面创建php会话并重定向到请求的原始页面。这些页面可能位于不同的域中并在不同的服务器上运行。这也可以在运行java或php或其他任何服务器的不同服务器上复制和实现。

acc.intt/page.php文件 - > sso.intt/cosession.jsp - > acc.intt/cosession.php - > acc.intt/page.php文件