这个问题的引入是由于公司一个项目里需要使用单点登录的功能,为了方便起见,就使用redis来替换php默认的文件存储session,当然这里使用memcache或者mysql等也都是一样的,实施起来非常简单,只需要改php.ini里的两处配置即可:
session.save_handler = redis
session.save_path = "tcp://host1:6379?weight=1, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2"
具体可参考该文章:
https://github.com/nicolasff/phpredis
正常情况下没有任何问题,而当配置的redis服务器都宕机的时候,php运行环境也会直接挂掉,如果display_error=On的话,就会看到如下错误:
Fatal error: Exception thrown without a stack frame in Unknown on line 0
如果是生产环境没开启错误提示的话,就是一个空白页面。
由于该Fatal Error也没有非常明确的错误定位信息,所以我也是费了半个多小时的功夫才定位错误,原因就是上面提到的redis服务器挂了。
当然这里解决方案是有的,比如多做几台redis主从,通过类似于上面的配置,只要有一台在工作,就不会造成整个php环境的崩溃,或者不是在php.ini里直接修改这个配置,在程序里使用ini_set来设置,设置之前ping一下服务是否正常,不正常的话启用一个别的什么备用方案。
最后,我想说的是,php对于session存储的依赖度很高,一旦session存储介质出现异常(比如存储服务宕机、文件系统磁盘满了等),整个和php相关的代码都会挂起,所以吃一堑长一智吧
分享到:
相关推荐
在IT行业中,PHP和MySQL是两个非常重要的工具,它们经常被用来构建动态网站和Web应用程序。本主题聚焦于“PHP MySQL数据库存储session”,这涉及...开发者需要权衡这些因素,根据项目需求选择最适合的session存储方式。
PHP Session基于服务器端存储,每个用户都有一个唯一的Session ID,这个ID通过cookie发送到客户端浏览器。当用户访问新页面时,浏览器将Session ID发送回服务器,服务器根据ID找到对应的数据并恢复用户的会话状态。...
总结来说,理解并灵活运用PHP的Session设置至关重要,它涉及到Session数据的存储位置、过期策略以及在多服务器环境下的管理。通过正确配置和编程技巧,开发者可以有效地控制Session的生命周期,从而优化用户体验和...
在Web开发中,PHP的Session机制是一种非常重要的用户状态管理工具,它允许开发者在用户的浏览器会话之间存储数据,确保在不同页面间传递信息。本篇文章将深入探讨Session的工作原理以及其在实际应用中的操作。 ### ...
8. **自定义存储机制**:除了标准的文件系统存储,类可能实现了自定义的Session存储机制,如数据库存储,这有助于在多服务器环境下共享Session数据。 9. **编码与解码**:为了确保数据的正确传输,类可能包含对...
2. **Session存储路径**:PHP默认将session数据存储在服务器的临时目录中。检查`session.save_path`配置,确保文件被正确删除。可以使用`session_save_path()`函数获取当前路径,然后手动删除session文件。 3. **...
### PHP Session阻塞问题分析与优化 #### 一、PHP Session阻塞现象解析 在进行PHP Web开发过程中,经常会遇到由于长时间运行...通过这些方法可以有效缓解Session阻塞带来的负面影响,提高系统的整体性能和用户体验。
总之,PHP session购物车是一个基础但关键的应用,它展示了如何在无状态的HTTP环境中维持用户状态。理解并熟练掌握这一技术对于任何PHP开发者来说都是至关重要的,无论是在学习阶段还是在实际工作中。
例如,可以设置`session.save_path`来指定Session数据的存储路径,`session.cookie_lifetime`来设定Cookie的生命周期,`session.gc_maxlifetime`来设定Session数据在服务器上的存活时间等。 3. **自定义Session处理...
PHP的memcache扩展提供了一个解决方案,它是一个高性能的分布式内存对象缓存系统,常被用来作为session存储后端。通过配置php.ini文件,可以将session的存储机制从默认的文件系统改为memcache服务器集群。 具体实现...
- **创建与存储:**当用户首次访问网站时,服务器会创建一个唯一的Session ID,并将其存储在客户端的Cookie中。 - **跟踪与更新:**每次用户发起请求时,都会携带这个Session ID,服务器通过这个ID来识别用户并提供...
传统的session存储方式,如文件或数据库,可能无法满足高并发、高可用性的需求。为了解决这个问题,我们可以利用memcache(或其升级版memcached)来实现session的存储和共享,从而达到session跨服务器跨域的目的。...
6. 使用服务器端SESSION存储:不依赖客户端的cookie,减少SESSION ID被盗用的机会。 结合标题和描述,我们可以推测这个压缩包可能包含一个示例代码,展示了如何通过PHP实现跨域提交和伪造SESSION的操作。在学习和...
1. **自定义Session存储**:可以通过重写PHP内置的Session处理器来实现自定义的Session存储方式,如使用数据库或其他持久化存储。 2. **Session复制**:在多服务器环境下,可能需要实现Session复制或共享机制,以...
5. **自定义session存储处理**:如果以上方法仍无法满足需求,可以考虑自定义session存储处理器,通过实现`session_set_save_handler()`函数来自行管理session的创建、读取、写入和销毁过程,从而更好地控制session...
在网站开发过程中,特别是在大型分布式系统中,跨服务器共享用户状态是常见的需求。"PHP_实现多服务器共享_...通过以上方式,我们可以实现PHP在多服务器环境下的SESSION数据共享,提高用户体验并确保系统的稳定运行。
里边有详细代码,包含SQL脚本,...//设置用户自定义Session存储 session_set_save_handler('mysession_open', 'mysession_close', 'mysession_read', 'mysession_write', 'mysession_destroy', 'mysession_gc'); ?>
- **Session 数据存储**:服务器端会创建一个存储空间来保存每个用户的会话数据,这些数据可以包括但不限于用户的身份信息、偏好设置等。 - **Session ID 的传递方式**: - **Cookie**:最常用的方式是通过 Cookie ...
基于内存的session系统,可替代默认的基于小文件的session,基于内存存储,可设置独立的session服务器,以使多个web服务器共用同一session空间,则效率比使用数据库的session高很多。