解析 PHP 中 session 的实现原理以及大网站应用应该注意的问题

news/2024/5/17 2:15:41/文章来源:https://blog.csdn.net/weixin_34291004/article/details/93687789

一 PHP SESSION原理

session 是在服务器端保持用户会话数据的一种方法,而 cookie 是在客户端保持用户数据。HTTP 协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系。那么,服务器是如何记住众多用户的会话数据呢?

首先要将客户端和服务器端建立一对一联系,每个客户端都得有一个唯一标识,这样服务器才能识别出来。建立唯一标识的方法有两种:cookie 或者通过 GET 方式指定。默认配置的 PHP 使用 session 的时候会建立一个名叫 "PHPSESSID" 的 cookie(可以通过 php.ini 修改 session.name 值指定),如果客户端禁用 cookie ,也可以指定通过 GET 方式把 session id 传到服务器(修改 php.ini 中 session.use_trans_sid 等参数)。

查看服务器端 /tmp 目录(在不修改 PHP 配置的情况下)会发现很多类似 sess_0fb45ob06s3ictc5qp98frvjl6 这样的文件,这个其实就是 session id "0fb45ob06s3ictc5qp98frvjl6" 对应的数据。真相就在这里,客户端将 session id 传递到服务器,服务器根据 session id 找到对应的文件,读取的时候对文件内容进行反序列化得到 session 的值,而保存的时候先序列化再写入。

事实就是这样,所以如果服务器不支持 session 或者你想自定义 session,通过 PHP 的 uniqid 生成永不重复的 session id,然后找个地方存储 session 的内容即可。

二 使用 SESSION 之前为什么必须先执行 session_start()?

了解 session 的原理之后,所谓的 session 其实就是客户端一个 session id 对应服务器端一个 session file。新建 session 之前执行 session_start() 是告诉服务器要接收一个cookie 以及准备好 session 文件,要不然 session 内容怎么存;读取 session 之前执行 session_start() 是告诉服务器,赶紧根据 session id 把 session 文件反序列化。

只有一个 session 函数可以在 session_start() 之前执行,session_name():读取或指定 session 名称(比如默认的就是 "PHPSESSID"),这个当然要在 session_start 之前执行。

三 SESSION影响系统性能

session 在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,PHP支持 session 目录hash,可以通过修改 php.ini 中 session.save_path = “2;/path/to/session/dir”,那么 session 将存储在两级子目录中,每个目录有16个子目录[0~f],不过 PHP session 不支持创建目录,需要事先把那么些目录创建好。

还有一个问题就是小文件的效率问题,一般 session 数据都不会太大(1~2K),如果有大量这样1~2K 的文件在磁盘上,IO 效率肯定会很差。

其实还有很多中存储 session 的方式,可以通过 php -i|grep "Registered save handlers" 查看,比如 Registered save handlers => files user sqlite eaccelerator 可以通过文件、用户、sqlite、eaccelerator来存,如果服务器装了 memcached,还有 mmcache 的选项。当然还有很多,比如 MySQL、PostgreSQL 等等,都是不错的选择。

四 SESSION的同步

前端可能有很多台服务器,用户在A服务器上登录了,种下了 session 信息,然后访问网站的某些页面可能会跳到 B 服务器上去了,如果这个时候 B 服务器上没有 session 信息又没有做特殊处理,可能就会出问题了。

session 同步有很多种,如果你是存储在 memcached 或者 MySQL 中,那就很容易了,指定到同样的位置即可,如果是文件形式的,你可以用 NFS 统一存储。

还有一种方式是通过加密的 cookie 来实现,用户在A服务器上登录成功,在用户的浏览器上种上一个加密的 cookie,当用户访问B服务器时,检查有无 session,如果有当然没问题,如果没有,就去检验 cookie 是否有效,cookie 有效的话就在 B 服务器上重建 session。这种方法其实很有用,如果网站有很多个子频道,服务器也不在一个机房,session 没办法同步又想做统一登录那就太有用了。

当然还有一种方法就是在负载均衡那一层保持会话,把访问者绑定在某个服务器上,那么所有访问都在那个服务器上就不需要 session 同步了。

转载于:https://www.cnblogs.com/afee666/p/6888990.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_755449.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈用ASP.NET开发的大型网站有哪些架构方式(成本)

在上篇文章里(http://www.cnblogs.com/ms0017/archive/2011/07/26/2117676.html),列举了国内外用ASP.NET开发的大型网站有哪些。最后提到了用.NET开发的大型网站和LAMP/JAVA平台的成本比较。其实在很多时候,收费的不一定就比免费的成本更高。因为开发一个…

大型互联网网站架构

构建高性能Web站点 http://download.csdn.net/download/E_wsq/2613845http://download.csdn.net/download/E_wsq/2613845 ===========&#xff…

部分HTTPS网站受影响:Firefox暂停“弃用SHA-1加密”计划

由于SHA-1脆弱的安全性,Mozilla、谷歌、微软纷纷宣布了弃用这项加密技术的计划。但是由于不少设备与平台未能及时跟进,这一迁移让大量老用户受到了影响。此前,Facebook曾表示会为不支持SHA-1的访客继续提供服务。而在部分Firefox用户报告无法…

php网站主页后台_标准化企业网站建设方案是什么样的?

一、企业网站的意义企业网站是企业在互联网上进行网络营销和形象宣传的平台,相当于企业的网络名片,不但对企业的形象是一个良好的宣传,同时可以辅助企业的销售,通过网络直接帮助企业实现产品的销售。企业可以利用网站来进行企业形…

python f.write 保存图片到路径_Python爬虫篇—网页爬虫、图片爬虫、文章爬虫、新闻网站爬虫...

今天分享一则python比较基础的技术,爬虫。教小白们怎么轻松利用爬虫技术获取自己想要的知识内容。本节学习目标:学习Python爬虫爬取新闻网站新闻列表爬取图片把爬取到的数据存在本地文件夹或者数据库学会用pycharm的pip安装Python需要用到的扩展包一、首…

js添加keyword让搜索引擎能够搜到_广州seo搜索搜索引擎优化电话-哪家好_华阳网络...

广州seo搜索搜索引擎优化电话-哪家好,热门搜索事件的短标题和普通微博的热门搜索标题。奇怪的头条类似于媒体的头条,伪“头条党”。当用户搜索结果时,他们首先看到的是标题和描述。如果标题和描述不够吸引人,则无法单击。那么,如何…

如何设置几个循环出来的span其中一个宽度_一步一步实现一个古诗词网站(三)——首页...

汪小黑:一步一步实现一个古诗文网站(二)——需求分析​zhuanlan.zhihu.com上篇文章,我们对项目进行了需求分析,明确了项目所需的各个功能模块,产出了页面的原型设计图。这篇文章我们将进入实战编码环节&…

.NET技术+25台服务器怎样支撑世界第54大网站

英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And Its All About Performance StackOverflow 是一个 IT 技术问答网站,用户可以在网站上提交和回答问题。当下的 StackOverflow 已拥有 400 万个用户&…

seo伪原创工具_一键生成伪原创文章有用吗(正确使用伪原创工具)

一定有不少的SEOer正在使用伪原创文件生成器这个工具吧,我可以正确的断定出来,一个懂SEO优化的SEOer绝对能够正确理解文章的作用,而那些似懂非懂的SEOer每天都在为原创文章的事情烦恼。往往一直以为每天坚持更新文章就可以获得排名的SEOer却没…

十年Java编程开发生涯,java基础刷题网站

Spring 面试题 1、不同版本的 Spring Framework 有哪些主要功能? 2、什么是 Spring Framework? 3、列举 Spring Framework 的优点。 4、Spring Framework 有哪些不同的功能? 5、Spring Framework 中有多少个模块,它们分别是什…

antd table 时间搜索_一份完整的网站SEO搜索引擎优化方案思路,送给你,请查收!...

我们在给一个网站做SEO优化的时候,通常都需要先做出一份网站优化的方案,根据方案再去针对网站进行细致的调整优化工作。这份方案的思路决定了你是否能把网站的优化做好,具体详情请大家继续往下看。一、行业品牌/调研我们在做一个网站的SEO优化…

Windows平台网站图片服务器架构的演进

构建在Windows平台之上的网站,往往会被业内众多架构师认为很“保守”。很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成的。由于长期缺乏开源支持,所以只能“闭门造车”,这样很容易形成思…

高扩展性网站的50条原则

《高扩展性网站的50条原则》,利用一天半的时间快速浏览总结的电子书,对网站的建设有一个原则性的把握,书中提到的大部分原则现在已成为互联网行业的共识,但并不妨碍我们重新整理分类,从全局层面把控高扩展性网站的建设…

大型网站图片服务器架构的演进

在主流的Web站点中,图片往往是不可或缺的页面元素,尤其在大型网站中,几乎都将面临“海量图片资源”的存储、访问等相关技术问题。在针对图片服务器的架构扩展中,也会历经很多曲折甚至是血泪教训(尤其是早期规划不足&am…

程序员 10个 堪称神器的学习网站

话不多说,直接上干货! 注:分享一个学习交流群796170550,有不懂的问题可以一起相互讨论 【群里还含有:Java80g学习视频Java学习书籍Java项目实战源码安装软件等】 01、大学资源网 大学资源网是一个完全免费并且功能非…

爆肝整理珍藏多年的实用工具/学习网站,助你在写代码的路上更顺利!!!

前言 这期是介绍自己常用的一些工具安利一下 千万不要白嫖,真香警告⚠️。 但是我在构思这篇文章的时候发现我贴个标题,然后发下软件信息会不会太乏味了,于是创作鬼才我呀,准备用一个产品的研发流程,是的就是用这样的…

那些好用的网站推荐(一)----功能网站

1.Smallpdf:(https://smallpdf.com/) 可以实现文档之间的互相转换,我经常用的就是PDF转word,还有各种文件格式之间的转换 2.ProcessOn:(https://www.processon.com/) 很好的免费作图软件,画流程图、UML图,…

那些好用的网站推荐(二)----学习网站

3.菜鸟教程:(https://www.runoob.com/) 对新手很友好的一个教程网站,一般可以通过这个网站大体了解一下想要学习的知识,了解大体后再进行深度学习,很nice! 4.虎课网:(https://huke88.com/album/2.html?se…

那些好用的网站推荐(三)----考研篇

31.考研帮:(http://www.kaoyan.com/) 32.考试点考研网:(http://www.kaoshidian.com/) 里面有很多公开课(收费) 33.2020考研报名查询:(http://kaoyan.eol.cn/) 里面有很多东西 34.中国研究生招生信息网:(…

那些好用的网站推荐(四)----英语学习网站

23.VOA:(https://www.chinavoa.com/) 24.TED:(https://www.ted.com/#/) 25.NPR:(https://www.npr.org/) 26.BBC:(https://bbc.enfamily.cn/) 27.韦氏辞典:(https://www.merriam-webster.com/) 英英词典 28.有道在…