繁体   English   中英

与PHP共享Servlet会话

[英]Sharing Servlet session with PHP

我想将Java EE应用程序服务器(GlassFish 3)用作Java应用程序和PHP应用程序的SSO服务。 如果用户通过GlassFish进行身份验证,他还应该登录到PHP应用程序。

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

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

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

我没有连接PHP和Java应用服务器的经验,但总的来说是集成:

执行单点登录的常用方法是在PHP脚本中读取会话ID(例如,由Java Server设置的cookie),并在内部将其传递给应用服务器(例如,通过命令行,通过进行HTTP调用或共享缓存实例)并恢复身份验证状态。

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

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

当然,首先要检查cletus提到的内置Java / PHP集成函数是否已经完成。

我不知道最佳实践......但通常如果它有效并且价格不贵且不会危及安全性,那么它可能是一种可以接受的做法。

当用户访问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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM