其实此时此刻我并不知道造成这个错误的深层原因是什么,也不知道问题被解决的具体道理,只是先把这种异常情况记录一下,以防有人跟我一样被折磨过长时间。
这个问题是在我做一个腾讯微博授权绑定功能时出现的。
我希望在微博授权完成后使用session记录token信息,然后在创建关联账户时会用到这个session,期间不可避免的会页面跳转。然后问题出现了,页面在跳转后,session丢失了,而且也不是全部丢失,因为我在session中存的是一个数组,最后发现数组的key都还在,只是value不见了,而且最诡异的就是,其他地方的session都是可以正常传递的,只是某一个方法不行。我查了一些资料,对比了php.ini的配置,也使用了session id,但是都没有解决问题,最后决定从源头入手,回头看了一下设置session的地方
....
$key = get_qq_token($_GET["code"], $_GET["state"], $_SESSION["URI"]);
if($key['access_token'] !== false){
$_SESSION['qq_keys'] = $key;
$me = get_qq_user_info($key['access_token'], $key['openid']);
}
....
我发现了设置session后调用的那个取user信息的方法,这个方法使用的是php的curl函数类,向指定的url发请求。然后开始怀疑“是不是在这里session的值被处理掉了,不知道 curl_close 这个方法会不会把当前的session值都会清空”,如前所述,原因我现在也不知道,但是这个怀疑确实帮我解决了问题,于是我把session设置延后到调用方法以后,即
$me = get_qq_user_info($key['access_token'], $key['openid']);
$_SESSION['qq_keys'] = $key;
结果问题真的解决了,session正常传递到跳转页面。
虽然不知道原因,但是也许可以记住一个窍门儿:session要在curl请求之后设置,中间穿插curl请求会使session丢失。
这个结论有待进一步考证。
分享到:
相关推荐
在Windows环境下搭建Apache + PHP环境时,可能会遇到各种问题,其中一种常见的问题是SESSION丢失,这在网站迁移或者系统升级过程中尤为突出。本文记录了一个具体的案例,涉及到PHP站点的SESSION管理,JavaScript异步...
在Web浏览器的安全策略中,同源策略(Same-origin policy)禁止了一个源(协议+域名+端口)的文档或脚本直接获取另一个源的资源,包括Cookie和Session。然而,在实际应用中,如需要在一个系统中集成多个子系统,这种...
总结来说,PHP学生信息管理后台系统是一个集数据录入、查询、更新和删除于一体的综合平台,它充分利用了PHP的动态特性和MySQL的数据库功能,实现了对大量学生信息的有效管理。无论是对于学校的日常运营,还是对于...
总的来说,"简约登录效果案例"是一个关于如何创建用户友好、安全的登录功能的学习资源。通过对这个案例的研究,开发者可以了解登录界面设计的原则,前端与后端的交互机制,以及如何确保用户数据的安全。无论你是初学...
【标题】"PHP实例开发源码—无名轻聊PHP源码.zip" 是一个压缩包,其中包含了PHP语言实现的一款名为“无名轻聊”的应用的源代码。这个实例源码可能是一个简单的在线聊天系统或者社交平台,为开发者提供了一个学习和...
总的来说,这个基于PHP的小说管理系统源码是一个综合性的项目,涵盖了Web开发的多个方面,对于理解和学习Web开发,特别是PHP相关的技术,是一个很好的实践案例。通过深入研究源码,不仅可以提升PHP技能,还能了解到...
【标题】"基于PHP的翰烽失物招领php留言板final源码.zip"是一个包含PHP编程语言实现的失物招领留言板...对于想要学习PHP Web开发的人来说,这是一个很好的实践案例,可以从中学习到实际项目开发中的许多技巧和规范。
PHP是一种广泛使用的开源脚本语言,尤其在Web开发领域中,因其易学易用和高效性而备受青睐。本项目是一个基于PHP实现的简易网上投票系统,它使用文本数据库...对于学习和理解PHP Web开发,这是一个很好的实践案例。
在PHP中,可以创建一个角色表,一个用户可以对应多个角色,每个角色拥有特定的权限。通过判断用户的角色,可以动态决定他们能否执行某个操作。这通常涉及数据库查询和条件判断。 在实际开发中,还要考虑到错误处理...
【标题】: "基于PHP的顾客购买销售登记备份程序源码" 这个压缩包文件提供了一个用PHP编程语言编写的顾客购买...对于学习PHP开发的开发者来说,这是一个很好的实践案例,可以帮助他们深入了解PHP在实际项目中的应用。
【php网站计数器 2.0版】是一款基于PHP...通过以上知识点的介绍,我们可以了解到PHP网站计数器2.0版的设计思路和实现方式,对于想要学习PHP Web开发或者需要统计网站访问量的人来说,这是一个很好的学习和实践案例。
- **会话管理**:使用PHP的session来跟踪用户的购物车状态,确保用户在不同页面间切换时购物车信息不丢失。 - **安全性**:防止SQL注入、XSS攻击,使用预编译语句、过滤用户输入、设置安全HTTP头等手段。 - **...
这个基于PHP的选课系统是一个典型的Web应用程序案例,涵盖了后端开发、前端交互和数据库管理的核心技术,对于学习Web开发的同学来说,是很好的实践项目。通过分析和实践,可以深入理解这些技术在实际项目中的应用。
这个项目对于学习PHP编程、MySQL数据库管理和Web开发的初学者来说是一个很好的实践案例。项目效果良好,可以提供食谱分享、用户互动、搜索等功能,是了解Web应用程序开发流程的一个实用范例。 【PHP知识详解】 PHP...
在一个简单的实现中,可以直接在每个受保护的页面顶部检查Cookie: ```php <?php if($_COOKIE['uname'] != ""){ $CKUNAME = $_COOKIE['uname']; // 获取密码并验证用户 // ... // 如果验证成功,将用户信息存入...
在Web服务器环境中,每个客户端的请求都会创建一个新的session对象,用于保存用户的会话信息,但这样会消耗服务器资源。为了解决这个问题,服务器提供了application对象,它在整个应用程序的生命周期内只创建一次,...
【欢欢聊天室(修改完善版).rar】是一个基于PHP开发的聊天室应用,它强调的是简洁性,不需要依赖数据库就能...对于想要学习PHP开发或理解如何在没有数据库的情况下实现用户交互的开发者来说,这是一个很好的实践案例。
对于想要提升PHP技能的开发者来说,FreshInvoice是一个很好的学习案例。通过分析其源代码,可以了解到以下几点: 1. **最佳实践**:了解PHP在实际项目中的应用方式,掌握良好的编程习惯和结构设计。 2. **MVC模式**...
1. **原子性**:原子性确保事务中的每个操作都是一个不可分割的操作单元,如果事务中的任何一步失败,整个事务都将回滚,不会留下部分完成的操作。例如,在银行转账场景中,如果不能同时从一个账户减去金额并增加到...
失物招领留言板源码是一种常见的在线应用,用于在社区、学校或公共场所创建一个互动平台,让人们可以发布丢失和找到的物品信息。源码是构建此类应用的基础,它包含了程序的全部逻辑和结构,通常由程序员用编程语言...