我有两个应用程序,一个是前端应用程序,另一个是后端应用程序。
每个应用程序都有自己的相同用户数据库副本。当用户登录前端应用程序时,我还将使用后端应用程序提供的Web服务同时登录后端应用程序。
现在的问题是我可以从前端应用程序销毁后端会话吗?后端使用$ _Session超级全局数组来存储所有会话信息。如果是,怎么样?
答案 0 :(得分:1)
是的。
我认为您正在使用相同的会话ID名称。我认为默认值是PHP_SESSID。如果是这种情况,则所有会话详细信息将存储在一个位置。
我也认为前端和后端的域名是相同的......如果它不同,那么它将不起作用,因为Web浏览器不会在不同域之间共享会话信息。
如果你为前端和后端使用不同的会话ID名称,那么你将不得不变得棘手。 (两者的会话ID都在请求数据中,您只需要加载两个会话并将它们都销毁。)
使用:
session_destroy();
答案 1 :(得分:0)
您需要从数据库或文件中删除会话记录(取决于系统的配置)。
系统可能默认使用基于文件的会话,您可以使用session_save_path确定目录。使用存储在数据库中的会话而不是文件系统上的会话几乎肯定要容易得多。
答案 2 :(得分:0)
如果您可以使用后端应用程序公开的Web服务来记录用户IN,为什么还不能使用它来记录用户OUT?这样一个应用程序就不必知道另一个应用程序如何实现会话(或者有权利在那里进行捣乱)。
如果无法做到这一点,你必须按照acrosman的建议去做,并深入研究会话文件或数据库。
答案 3 :(得分:0)
您如何将前端会话与后端会话联系起来?如果您保留前端和后端会话的会话名称(用作会话ID的唯一值)的映射,那么您可以轻松找到后端会话(它可以保存在文件或数据库中)然后删除会话记录。 使用此行来找出用于存储会话文件的处理程序:
$handler = init_get('session.save_handler');
您可以使用此行查找会话文件的存储位置:
$path = ini_get('session.save_path');
然后您可以删除会话文件或数据库记录。
您还可以创建一个Web服务方法来销毁后端会话,然后从前端调用它。
答案 4 :(得分:0)
如果两个应用程序位于同一个域的不同子域中,则可以保存一个cookie,指示管理应用程序用户已注销。然后让管理员应用程序自己删除会话和“已注销”cookie。