为什么要ssion共享?
现在稍微大一点的网站基本上都有好几个子域名,比如, xz577.com, vip.xz577.com,这些网站如果需要共用用户登录信息,那么就需要做到ssion共享,当然前提是有相同的主域名。
php的ssion原理?
客户端访问php页面,执行ssion_start,生成ssion_id,一般我们是把ssion_id破折号是什么样子存储到cookie上,ssion内容保存在服务端,
客户端访问访问不同的页面都会把ssion_id传到服务端,通过ssion_id来获取ssion内容。
流程是这样,可是不同的服务器会对同一个客户端产生不同的ssion_id,这样的话不同服务器就不能得到相同的ssion内容。
而且php 默认的 ssion 数据都是分别保存在本服务器的文件系统中。
所以我们要解决ssion共享,就必须解决两个问题:
多台服务器用同一个ssion_id
这个比较容易解决,只要在php中设置存ssion_id的cookie域名为网站主域就可以
打开php.ini, 设置ssion.cookie_domain = .feiniu.com,
当然也可以在php代码当中设置ini_t(“ssion.cookie_domain”,段差8221;feiniu.com”);
多台服务器用同一个ssion_id访问到相同的ssion内容
要实现这点,就必须把ssion内容存储到让所有服务器都能访问到的地方,php的ssion内容是默认存储到本服务器的文件中的,
一般的解决方案是存入数据库,memcache或者redis这种缓存服务器,当然用默认的文件存储方式也可以,用nfs统一存储。
如何选择存储引擎?
默认文件存储:
这种方式的ssion销毁依托于php垃圾收集器,在高并发或销毁时间较长的情况下,在ssion目录下产生大量文件,当然可以设置
分级目录进行 ssion 文件的保存。
这会导致两个问题:第一、查找文件慢;第二,每个目录下可容纳的文件数是有限的,可能会导致新ssion储存失败。
数据库存储:
把ssion存储在数据库里可以防止ssion数据被垃圾收集器删除,可以固化存储ssion数据。
但是用数据库来同步ssion,会加大数纳兰词赏析据库的io,增加数据库的负担。而且数据库读写速度较慢,不利于ssion的适时同步。
memcache存储:
以这种方式来同步ssion,不会加大数据库的负担,并且安全性比较高,把ssion放到内存里面,比从文件中读取要快很多。
但是memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,
如果存储块不足,还会产生内存溢出。
那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统
效率,因为网络连接同样需要资源。
redis存储:与memcache相比,redis访问稍稍慢一点点,好处是:
redis支持的数据结构较多,九十大寿可以存储数组或对象,而memcache只能存储字符串。
在ssion机器重启的情况下,memcache所有用户都必须上海的大学重新获得 ssion,而redis不会。3.在突然涌来大量用户产生了很多数据把
存储 ssion 的机器内存占满了的情况下,memcache会罢工,所有key都没过期的话就不停的覆盖最后写入的数据,而redis只是会变
慢,不会影响程序的逻辑
本文发布于:2023-04-08 07:22:48,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/fdc8b2df30e62df0bff2f25a76cec770.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:php实现session共享的实例方法.doc
本文 PDF 下载地址:php实现session共享的实例方法.pdf
留言与评论(共有 0 条评论) |