phpsession登录功能(php实现session共享的实例方法)
phpsession登录功能
php实现session共享的实例方法为什么要session共享?
现在稍微大一点的网站基本上都有好几个子域名,比如www.zzvips.com, zzvips.com, tool.zzvips.com,这些网站如果需要共用用户登录信息,那么就需要做到session共享,当然前提是有相同的主域名。
PHP的session原理?
客户端访问php页面,执行session_start,生成session_id,一般我们是把session_id存储到cookie上,session内容保存在服务端,
客户端访问访问不同的页面都会把session_id传到服务端,通过session_id来获取session内容。
流程是这样,可是不同的服务器会对同一个客户端产生不同的session_id,这样的话不同服务器就不能得到相同的session内容。
而且PHP 默认的 SESSION 数据都是分别保存在本服务器的文件系统中。
所以我们要解决session共享,就必须解决两个问题:
多台服务器用同一个session_id
这个比较容易解决,只要在php中设置存session_id的cookie域名为网站主域就可以
打开PHP.ini, 设置session.cookie_domain = .zzvips.com,
当然也可以在php代码当中设置ini_set("session.cookie_domain","zzvips.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只是会变
慢,不会影响程序的逻辑
原文链接:https://www.php.cn/php-ask-430498.html
- php用什么解压(php解压缩zip和rar压缩包文件的方法)
- php和java联系(PHP实现与java 通信的插件使用教程)
- php 会话session实现用户登录功能(PHP cookie,session的使用与用户自动登录功能实现方法分析)
- php开发技巧和方法(php+ajax实现商品对比功能示例)
- php 精度误差调整(php精度计算的问题解析)
- phpstudy如何部署在linux上(phpstudy linux面板CC防护功能使用教程)
- php闰年计算公式(php判断/计算闰年的方法小结三种方法)
- php内置加密函数(php过滤htmlspecialchars 函数实现把预定义的字符转换为 HTML 实体用法分析)
- php查找文件存在(php判断目录存在的简单方法)
- php如何发邮件(PHP示例演示发送邮件给某个邮箱)
- thinkphp返回json(thinkphp5框架实现数据库读取的数据转换成json格式示例)
- php怎么实现多线程(PHP实现的多进程控制demo示例)
- phpmysql完全学习手册教程(Windows下搭建PHP开发环境Apache+PHP+MySQL)
- thinkphp使用说明(thinkphp框架使用JWTtoken的方法详解)
- php网页采集教程交流(PHP实现的抓取小说网站内容功能示例)
- dedecms新字段(DEDECMSv5.6 tags.php标签不能按照时间排序的问题)
- 靳东新剧《精英律师》定档,众星云集,这剧可追(靳东新剧精英律师定档)
- 精英律师 廖佳敏封印恋情曝光,顾婕马失前蹄 你个老不死的(廖佳敏封印恋情曝光)
- 以家人之名广受好评,剧情生动引起观众共鸣,演员张新成圈粉无数(以家人之名广受好评)
- 三兄妹感情再遇波折,人设接连崩塌 《以家人之名》剧情猜不透(三兄妹感情再遇波折)
- 《小敏家》金波想要复婚 这只是他圈套的第1步,更可恶的在后面(小敏家金波想要复婚)
- 小敏家 剧情离谱一锅乱炖,但他们俩绝对是这部剧的一大 亮点(剧情离谱一锅乱炖)
热门推荐
- docker配置说明(Docker安装Kong API Gateway并使用的详细教程)
- SQL Server表误删记录如何恢复
- nginx做图片服务器代理(使用nginx动态转换图片大小生成缩略图)
- pythonhttp文件服务器(使用Python创建简单的HTTP服务器的方法步骤)
- unix进程空间的区段(Unix/Linux fork隐藏的开销)
- vue项目引入element页面(vue-element-admin项目导入和导出的实现)
- jquerycss3轮播案例(CSS3实现列表无限滚动/轮播效果)
- vue滑动切换页面(vue实现点击翻转效果)
- python连接到本地的mysql数据库(Python实现连接MySql数据库及增删改查操作详解)
- dedecms可以长期使用吗(dedecms5.7 文章不能发布问题探讨及解决方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9