我有一个场景,想要你们的意见。
我在Django,Rails,PHP中开发了不同的Web应用程序,我希望它们每次都能共享相同的会话数据。意味着如果用户登录到PHP应用程序,它可以自动登录到Rails应用程序,反之亦然。
我知道某种中央身份验证服务器。其中一些是cas,josso。
你们对此有什么看法?我想要像Google Apps这样的行为,当我登录Gmail时,我也可以自动登录GoogleDocs。
请分享您的想法,如何实施此方案?
答案 0 :(得分:2)
Google完全在.google.com域名下运行,这就是为什么他们使用单个Cookie在各应用程序中识别您完全没有问题。如果您的应用程序都在同一个域上运行,我会说继续编写一个自定义实现来授权用户使用共享会话cookie。
但是,在更不可能发生这种情况的情况下,您最好在应用程序中单独实施一种比较流行且广泛使用的SSO方法,例如OAuth或OpenID并为您的用户提供一个集中的应用程序进行身份验证,或让他们通过外部提供商(如Facebook或Google,支持通过OpenID进行身份验证)进行身份验证
您可以运行自己的OAuth或OpenID端点,用户可以在该端点注册,然后通过此端点在任何应用程序上进行身份验证。
答案 1 :(得分:0)
在PHP中,您可以使用session_set_save_handler
指定会话的持久性和恢复方式。我猜Django和Ruby On Rails提供类似的手段
答案 2 :(得分:0)
只需将会话存储在db ore中即可自行处理
最好的方法是为此创建一个特殊的表 请注意,因为序列化数据太难以处理,因此在存储在适当的字段之前,要将此数据存储为sialized以便反序列化
在php中你有 $ _SESSION 和session_set_save_handler() 但我认为你自己做得更好确保所有网站都使用单个Cookie域(ajax onload(尝试获取此coockie),或保留相同的域名)
答案 3 :(得分:-2)
在我的应用中,我使用SESSION
来存储登录用户的值。例如$_SESSION['site1']['bakcend']['loggedin']=1;
比在其他地方进行会话检查。它们当然都在同一个domain.tld
如果您使用上面的示例$_SESSION['site1']['bakcend']['loggedin']=1;
,如果您有许多部分,则需要进行大量检查。但这只是一种观点,有一个更灵活的地方。
您也可以使用cookies。