Yii框架实现session跨域单点登录配置详解

3星 · 超过75%的资源 需积分: 9 62 下载量 196 浏览量 更新于2024-09-13 收藏 2KB TXT 举报
本文主要介绍了如何在Yii框架中实现session会话的跨域共享,以支持单点登录或多子域名应用的登录功能。 在Yii框架中,为了实现跨域单点登录,我们需要对session配置进行适当的调整。首先,我们要确保在不同的子域名之间能够共享相同的session数据。这主要涉及到`components`中的`user`、`session`和`statePersister`配置项。 1. 配置`user`组件: - `'identityCookie'`:设置用户的认证cookie作用域,使其可以在所有子域名下生效。例如,将`domain`设置为`.host.com`,意味着cookie将在所有以`host.com`为顶级域名的子域名下可用。 - `'allowAutoLogin'`:开启自动登录功能,允许用户在访问其他子域名时无需再次登录。 - `'stateKeyPrefix'`:设置一个一致的前缀,用于区分不同应用或子站点的session状态数据。 2. 配置`session`组件: - `'cookieParams'`:设置session ID的cookie参数,`domain`应与`identityCookie`的`domain`相同,以确保session ID在所有子域名间有效。同时,设置`lifetime`为0表示session直到浏览器关闭才过期。 - `'class'`:这里使用了`CCacheHttpSession`,它将session数据存储在缓存中,提高性能。 - `'cacheID'`:指定使用哪个缓存服务,例如`memcache`。 - `'autoStart'`:开启session自动启动。 - `'cookieMode'`:设置为`only`,确保cookie只在浏览器中存储,不通过URL传递,避免安全问题。 3. 配置`statePersister`组件: - `'stateFile'`:定义了一个用于存储加密状态信息的文件路径,这个文件必须在所有服务器上保持同步,以确保跨域验证的准确性。 4. 配置`memcache`: - `'class'`:使用`CMemCache`作为缓存服务。 - `'servers'`:定义了memcached服务器的地址和端口。 - `'keyPrefix'`:添加一个唯一的前缀,以便区分不同应用的数据。 通过上述配置,Yii框架可以在多个子域名之间实现session的共享,从而达到单点登录的效果。当用户在一个子域名上登录后,其认证信息会被存储在共享的session中,使得用户在访问其他子域名时也能自动登录,提高了用户体验。 需要注意的是,在分布式部署环境下,状态文件(`stateFile`)和缓存服务(如memcached)需要在所有服务器上保持同步和可用,以确保跨域session的正确性和一致性。此外,安全性也非常重要,确保敏感数据在传输和存储过程中得到妥善保护,避免遭受攻击。