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