|
之前在博客发过一篇文章 讲了三种方法实现dede在使用QQ登陆之后 怎样跳回到登陆之前的页面 细细回想还是第二种方法比较靠谱 那就是session或者cookie 我这里采用的是session技术
dede使用会员主要用于需要金币的文章下载以及软件的下载 这里只考虑了这两种情况 也即在购买文章或者下载软件的时候 登录QQ之后再次回到未登录前的权限页面
这里使用的是亦秋工作室开发的织梦QQ登录程序 在此感谢亦秋工作室免费提供的插件 插件下载地址 dedecmsQQ一键登录插件 最新oauth协议2.0版
1-151119155520.zip
(748.78 KB, 下载次数: 588)
首先观察一下文件结构 主要是根目录下的qqLogin文件夹 以及member文件夹的login_qq.php
member文件夹下的login_qq.php
会员登录最后负责的文件是member文件夹下的login_qq.php 打开发现跳转的地址是在这里控制的 下图红色标注处
问题的关键就在于 怎么样把登录前的那个地址传到这个地方来 这个时候可以考虑使用session/cookie
文章阅读 软件下载控制的程序是根目录下plus下的download.php view.php 找到权限阅读处自行加上QQ登录按钮 如在view.php页面
也就是说 这个文件是在QQ登陆之前的页面 思路是在该页面将当前地址保存起来 最后在login_qq.php中取出该地址
那么问题来了 php如何获得当前页面地址呢 文章阅读地址如
http://www.xxxxxxx.net/plus/view.php?aid=4146
并且是带有参数的 如何获取当前页面地址 请参考 PHP中获取当前页面的完整URL
如
思路是在此处开启session_start()把当前页面地址保存在session里 可是不管我如何操作 在login_qq.php页面始终接收不到我保存的该session值 cookie也是一样 大家可以试一下 其中缘由看了QQ登陆程序也许能知晓
后来想到QQ登陆的入口文件是qqLogin/index.php 整个QQ登录是一套程序 算一个系统 那么我在这个文件里面保存session值 然后在login_qq.php取出该值是否可以呢 答案是肯定的 可以自行测试 问题就好办了 只要把在view.php获得的当前页面地址传到qqLogin/index.php即可 如下
然后在qqLogin/index.php接收一下 然后保存成session值
这里因为我做了一个首页签到功能 签完到是跳回到首页 登陆的时候不带参数 所以这里判断了一下
然后在login_qq.php页面
这样 貌似就可以实现 登陆之后跳回到登陆之前页面了 然。。。。。。。。。。。。。。。。
用上述方法在软件下载控制程序download.php同样操作 经过测试 点击登陆之后 竟然显示 没有找到可以下载的资源 (忘了截图了)
此时想到观察地址栏
登陆之前
然而登陆之后
也就是open=2之后的也就是绿色方框部分不见了 根据下载程序 当然会提示 找不到下载资源 此时想到会不会是在传递网址的过程中网址丢失了 经过测试 是在download.php到qqLogin/index.php传递的时候丢失的 注意我这里是用的GET方式传参 还想到过我这个传的参数是不是过长 以前记得听说GET方式传参有字符限制 大家可以去了解一下 但是我这个并不算长 然后去度娘 逛了逛 寻寻觅觅 终于让我看到下面一句话
关键就在于这里 我那个地址在传递过程中&以及后面的都被截掉了 然后根据上面所说的进行字符编码 还去十八哥的论坛搜了一下编码转换 说的都是使用javascript的函数 后来想起来查手册 发现php中有编码函数 那就是urlencode
于是对download.php进行改进 在传递之前做一次编码操作
ok 终于搞定 希望大家在此次测试中能意识到一些问题 以前不会的老是去度娘 最后还是没找到 比如我去搜php编码函数 结果不尽人意 最后想到查手册 url
|
|