2009-02-21 85 views
0

我有两个应用程序,一个是前端应用程序,另一个是后端应用程序。在另一个应用程序中销毁会话变量

每个应用程序都有自己的相同用户数据库的副本。当用户登录到前端应用程序时,我还将使用后端应用程序提供的Web服务同时登录后端应用程序。

现在的问题是我有可能从前端应用程序销毁后端会话吗?后端使用$ _Session超全局数组来存储所有会话信息。如果是,如何?

回答

1

是的。

我认为你正在使用相同的会话ID名称前后。我认为默认是PHP_SESSID。如果是这种情况,那么所有的会话细节将被存储在一个位置。

我也认为,前端和后端的领域是相同的。如果它不同,那么它不会工作,因为Web浏览器不会共享不同域之间的会话信息。

如果您为前后端使用不同的会话ID名称,那么您将不得不变得棘手。 (两者的会话ID都在请求数据中,您只需加载两个会话并销毁它们。)

使用:

session_destroy(); 
0

您需要从数据库或文件中删除会话记录(取决于系统的配置)。您可以使用session_save_path来确定目录。使用存储在数据库而不是文件系统中的会话几乎肯定会容易得多。

0

如果您可以使用后端应用程序公开的Web服务记录用户IN,为什么不能用它来记录用户OUT?这样一个应用程序不必知道另一个应用程序是如何实现会话的(或者在那里有特权)。

如果这是不可能的,你必须按照acrosman的建议去做,并挖掘会话文件或数据库。

+0

作为,因为它似乎不可思议,在Web服务只包括登录,但没有注销。其实后端不是由我写的(它是由别人写的,我最好不要碰它),所以我在这里没有选择。 – Graviton 2009-02-21 04:22:00

0

您如何将前端会话与后端会话相关联?如果您保留前端和后端会话的会话名称(用作会话ID的唯一值)的映射,那么您可以轻松找到后端会话(可将其保存在文件或数据库上),然后删除会话记录。 使用这条线,找出哪些处理程序被用来存储会话文件:

$handler = init_get('session.save_handler'); 

您可以使用此行来找出会话文件存储:

$path = ini_get('session.save_path'); 

,那么你可以删除会话文件或数据库记录。

您还可以创建Web服务方法来销毁后端会话,然后从前端调用它。

0

如果这两个应用程序位于同一个域的不同子域中,则可以保存一个cookie,指示管理应用程序该用户已注销。然后让管理应用程序本身删除会话和“注销”cookie。