总结
豆包 AI 助手文章总结

php如何实现session共享

(*-*)浩
发布: 2019-09-19 14:42:23
原创
4790人浏览过

为什么要session共享?

现在稍微大一点的网站基本上都有好几个子域名,比如www.feiniu.com, search.feiniu.com, member.feiniu.com,这些网站如果需要共用用户登录信息,那么就需要做到session共享,当然前提是有相同的主域名。

php如何实现session共享

PHP的session原理?

客户端访问php页面,执行session_start,生成session_id,一般我们是把session_id存储到cookie上,session内容保存在服务端,

立即学习PHP免费学习笔记(深入)”;

客户端访问访问不同的页面都会把session_id传到服务端,通过session_id来获取session内容。(推荐学习:PHP编程从入门到精通

流程是这样,可是不同的服务器会对同一个客户端产生不同的session_id,这样的话不同服务器就不能得到相同的session内容。

而且PHP 默认的 SESSION 数据都是分别保存在本服务器的文件系统中。

所以我们要解决session共享,就必须解决两个问题:

多台服务器用同一个session_id

这个比较容易解决,只要在php中设置存session_id的cookie域名为网站主域就可以
打开PHP.ini, 设置session.cookie_domain = .feiniu.com, 
当然也可以在php代码当中设置ini_set("session.cookie_domain","feiniu.com");
登录后复制

多台服务器用同一个session_id访问到相同的session内容 

要实现这点,就必须把session内容存储到让所有服务器都能访问到的地方,php的session内容是默认存储到本服务器的文件中的,
一般的解决方案是存入数据库,memcache或者redis这种缓存服务器,当然用默认的文件存储方式也可以,用NFS统一存储。
登录后复制

如何选择存储引擎?

默认文件存储:

这种方式的session销毁依托于php垃圾收集器,在高并发或销毁时间较长的情况下,在SESSION目录下产生大量文件,当然可以设置
分级目录进行 SESSION 文件的保存。
这会导致两个问题:第一、查找文件慢;第二,每个目录下可容纳的文件数是有限的,可能会导致新SESSION储存失败。
登录后复制

数据库存储:

把Session存储在数据库里可以防止Session数据被垃圾收集器删除,可以固化存储session数据。
但是用数据库来同步session,会加大数据库的IO,增加数据库的负担。而且数据库读写速度较慢,不利于session的适时同步。
登录后复制

memcache存储:

以这种方式来同步session,不会加大数据库的负担,并且安全性比较高,把session放到内存里面,比从文件中读取要快很多。
但是memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,
如果存储块不足,还会产生内存溢出。
那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统
效率,因为网络连接同样需要资源。
登录后复制

 redis存储:与memcache相比,redis访问稍稍慢一点点,好处是:

redis支持的数据结构较多,可以存储数组或对象,而memcache只能存储字符串。
在session机器重启的情况下,memcache所有用户都必须重新获得 session,而redis不会。3.在突然涌来大量用户产生了很多数据把
存储 session 的机器内存占满了的情况下,memcache会罢工,所有key都没过期的话就不停的覆盖最后写入的数据,而redis只是会变
慢,不会影响程序的逻辑
登录后复制

以上就是php如何实现session共享的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号