discuz 跨域整合的记录文件
需积分: 0 41 浏览量
更新于2020-10-29
收藏 44KB PDF 举报
《Discuz跨域整合详解——实现多站点同步登录》
Discuz跨域整合是一个常见的需求,特别是在拥有多个子域名或不同域名的网站体系中,确保用户在任一站点登录后,能够在其他关联站点自动登录,提供无缝的用户体验。这篇记录文件详细介绍了如何将a.com、b.com、c.com等网站的登录状态同步到bbs.com的Discuz论坛。
1. **统一加密方式**:
在跨域整合中,确保所有网站与论坛的数据安全至关重要。为了实现这一点,我们需要将`common`项目中的MD5函数进行调整,使其与主站的加密方式保持一致。原函数可能使用了自定义的加密算法,而现在我们将它更改为使用系统内置的`FormsAuthentication.HashPasswordForStoringInConfigFile()`方法,以MD5为加密算法,并截取其中的16位字符,降低存储空间需求。
2. **编码与解码的简化**:
通常,编码和解码过程可能会有特定的实现,但在跨域整合中,我们希望简化这一过程,使得数据在各个站点间传递时能快速、无障碍地解码。因此,我们将`common`项目中的`Encode`和`Decode`函数改为直接返回数据,以减少不必要的转换步骤。
3. **处理Session与Cookie**:
ASP.NET中,如果选择使用Session,首先需要检查是否存在Cookie。当用户在主站退出时,只需清除Cookie即可完成同步登出。在示例代码中,创建了一个名为“dnt”的Cookie,包含用户的uid、密码(经过DES编码)、帖子每页显示数量(tpp和ppp)、消息提示声音设置(pmsound)、是否隐身(invisible)、来源页面(referer)、签名状态(sigstatus)以及过期时间。设置Cookie的Domain属性为`.xxxx.com`,确保所有子域名都能访问,并且设置`Secure`属性为False,允许非HTTPS连接。
4. **创建同步登录处理页面**:
在Discuz论坛的`aspx>>1`文件夹下创建`login_in.aspx`,这个页面将处理所有同步登录请求。通过此页面,无论用户在www.a.com还是www.b.com登录,都可以实现登录状态的同步。
5. **管理员部分的修改**:
由于加密方式的改变,管理员登录的部分也需要相应调整。在`admin/index.aspx.cs`文件中,注释掉原有的验证条件,仅保留对Cookie存在的检查,以适应新的加密逻辑。
6. **解决IE6的Cookie丢失问题**:
Internet Explorer 6(IE6)不支持P3P(Platform for Privacy Preferences Project)协议,可能导致Cookie在跨域时被拒绝。为了解决这个问题,可以在IIS服务器级别设置自定义HTTP头,添加P3P头信息。例如,设置头名为`P3P`,头值为`CP=CAO PSA OUR`,这样IE6会认为网站遵循了一定的隐私策略,允许Cookie的设置。
7. **整合所需文件**:
实现跨域整合可能涉及的文件包括但不限于:`index.aspx`(登录同步代码),以及引用的`Discuz.Forum`和`Discuz.Common`命名空间,这些文件可能需要在所有参与整合的站点上部署。
总结来说,Discuz跨域整合涉及的主要技术点包括:统一的加密算法、Cookie管理、Session与Cookie的交互、特定浏览器兼容性问题的解决,以及核心代码的调整。通过这些步骤,我们可以实现多站点间的登录状态同步,提高用户在多域名环境下的使用体验。