一些复杂的传值用session解决

有些时候需要传一些关键的数据去使用,如API接口服务器地址,或者一些会过期的数据

修改php。ini的配置项重要的三个配置项
session.save_handler=file
session.save_path="n/path
session.naem = PHPSESSID 事cookie的名称
session的数据u是默认的存储在服务器的

原生的session基本就那么几个函数 开启 -设置-销毁

$_SESSSION[‘session名’]

大多我们都是用框架的
简单方便 可以设置过期时间 释放session
是一种很方便的传值方法
但一般会提升对服务器的压力

第一 种思路

把存储在服务器的session存储到cookie中
a客户端请求的时候,原来生成在服务器的数据生成到浏览器的cookie中,根据cookie中的数据识别用户。php由原来的”从本地(也就是服务器)磁盘上读取session数据”转变为”浏览器的cookie中读取数据”
优点 不需要从服务器中读取session 服务器压力小了
缺点 高平发的情况下 每次请求服务器都需要发送session到服务器 cookie可以存储的数据很小只有2k 那么带宽就是一个问题 因为这样的化 成本就会很高
安全性也不高 因为cookie存储在浏览器端 不安全 而session帐可能存储比较重要的用户信息

第二种思路

保存在数据库中 这样的话 无论多少台web服务器都是统一操作一个数据库 就不存在什么共享了
自己写程序(php,java都可以实现,反正是保存在数据库中)模拟实现session的机制。

具体为,把以前存储在文件中的session数据存储到数据库中去,那么这样做,其实就不用到php内置的session机制了(像session_start()之类的函数都不需要去用了)。

写程序要模拟的是,从数据库拿session数据,约定什么情况下数据过期了然后自动清理,这里是指删除数据库中的行。保存在文件中的时候,php有垃圾回收机制会去自动清理过期的session文件

但是因为存储在数据库中 一旦高并发量的访问 就会对数据库压力很大 就会很慢

类似的做法和这种很想 比如ecshop phpcms

可以将session数据保存在memcached,redis之类内存数据库中,memcached是基于内存存储数据的,性能很高,用户并发量很大的时候尤其合适。
主要是利用内存的数据读取速度是很快的,与磁盘读取的速度不是一个数量级的。

redis存储数据的类型多 也可以作为数据库 安全性高 不容易丢失session 而且方便计算在线人数 访问速度快 而且支持高并发量 而且也符合session到期失效的需要

猜你喜欢

转载自blog.csdn.net/weixin_43023551/article/details/86610583