2011-08-19 42 views
3

我在我的服务器上的单个域中托管了几个Facebook应用程序。同一个用户可能会在一个会话中访问两个或更多的应用程序。我如何确保来自一个应用程序的某些数据不会在另一个应用程序中结束?由于用户可能只需从应用程序导航,因此注销不是一种选择。如何在一台服务器上处理一个用户的多个PHP会话?

回答

8

如果您为每个应用程序使用不同的session_name(),那么这些会话实际上是相互惰性的。

// Application 1 
session_name("APP1"); 
session_start(); 

// Application 2 
session_name("APP2"); 
session_start(); 
+0

尼斯一些数据会保存。我不知道你可以设置不同的会话名称。我猜他们是与每个指定的应用程序绑定的? – chustar

+1

如果每个应用程序都有自己的会话名称,那么是的。 session_name基本上最终成为会话ID存储的cookie的名称。因此,如果每个应用都有其自己的唯一会话名称,则用户将会为每个应用获得一个cookie,并且每个会话都将是独立的彼此的。另一种方法是在会话中使用子键'$ _SESSION ['app1'] [...]','$ _SESSION ['app2'] [...]'等等...... –

0

我能想到的将包括该人的会话数据使用的应用程序,如果你看到在用户的会话数据错误的会话,你破坏了会议的解决方案。

0

只是一个想法:也许你想为每个应用程序设置一个子域。这样cookies和会话就会自动完全分开,而不是依靠某个功能(这可能会很慢,正如一个人在session_name()手动注释中指出的那样)。

此外,我相信单独的子域让您更安全地利用漏洞因为相同的原产地政策。 (对吧?)

+0

不是。取决于如何设置Cookie。通常它们都设置在父域中,因此来自site1.example.com的cookie仍然会看到来自site2.example.com的cookie –

0

通过为每个应用程序使用不同的键,您可以制作类似会话部分的内容。你只需要确保密钥的唯一性。每次你保存在适当的部分例如为:

//save the ids into db or configuration file after it's generated 
$app1id = uniqid('fbApp'); 
$app2id = uniqid('fbApp'); 

//Save data for application 1 
$_SESSION[$app1id] = array('app' => 'data'); 

//Save data for application 2 
$_SESSION[$app2id] = array('app' => 'data'); 
相关问题