分享到 :

关于session的使用限制以及解决方案的说明

特别声明:
本文档中的问题描述和解决方案对OAuth1.0及OAuth2.0下的代码开发都有效。

1. 背景说明

在OAuth认证过程以及OpenAPI调用过程中,多次会用到appid,appkey,acess token等参数,需要把这些值存储起来。开发人员很容易想到用session来存储。  但是在正式网站运营环境中,我们并不建议使用session而是使用MySQL或者其他永久的存储来保存信息,以避免网站不止一台服务器的情况下,两次请求的sessoin信息可能不会保存在同一台服务器导致的访问出错等情况。

 

2. 使用session带来的问题

 

2.1 网站存在多个子域名的情况下如何共享session

默认情况下,子域名之间的session信息是不允许共享的。因此如果网站存在多个子域名,则有可能引发如下情况: 在登录过程用到了www.a.com,而在回调地址用到了www.i.a.com,由于session信息不能在两个子域名之间共享,导致用户访问回调地址出错。

 

2.2 同一个主域名不同服务器之间如何共享session

当网站服务器超过1台的时候,就出现了如何在不同服务器之间共享session信息的问题。

 

3. 解决方案

要解决如上问题,必须引入一个中间存储。数据库是一个非常合适的选择。

 

4. 示例代码

 

4.1 For OAuth2.0

我们暂时没有在OAuth2.0的SDK中给出该解决方案的示例代码,但是开发者仍然可以参考下面的OAuth1.0 SDK的示例代码。

 

4.2 For OAuth1.0

在PHP SDK中,我们在comm文件夹下建立了config.php文件,将appid,appkey,callback等信息存储在全局变量session中。

我们在PHP SDK V1.3版本中增加了session.php,以解决上述使用session带来的2个问题。

请开发者从SDK下载_OAuth1.0页面下载Beta V1.3 及以上版本的PHP SDK。

Tips:

使用前开发者需要对comm/php.session文件进行必要的修改。修改说明如下:

 

修改点1: 创建数据库表

以MySQL为例:

 

修改点2: 指定Session中数据库相关的变量值

修改点3: 定义MAIN_DOMAIN常量

修改点4: 开启“不同子域名下共享session信息”

修改点5: 开启“同一个主域名不同服务器之间共享session信息”

 

返回顶部