博主信息
博文 13
粉丝 0
评论 0
访问量 14017
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
会话机制
莫名的博客
原创
1238人浏览过

http是一个无状态协议,就是一次访问结束,彻底释放脚本定义的所有变量,并不保存变量。

来看几个场景:

1.当用户登录后,我们需要记住登录的用户是谁?

2.当用户做了某些操作,我们需要知道用户做了哪些操作?


现在我们想想不用会话机制,我们能怎么解决?

1.表单或者url传送我们要的数据

2.把要的数据存储进数据库,需要时在取出来

这两个缺点是:每次使用,都要传送数据或者从数据库中存储数据。这是得数据的使用变得异常的麻烦


会话机制的作用:

追踪用户信息和用户一些重要操作记录


Cookie

把需要的数据以文件的形式储存到客户端,当每次进行请求时,把文件里的信息携带过去。

特点:信息存储在客户端

缺点:往客户端中写文件是很危险的,用户安全信息不高,客户端cookie信息容易被盗取


Session

把用户数据储存到服务器中,给用户一个sessionid储存在cookie中,当用户访问网站时,使用用户的sessionid,查找出对应的数据。

特点:信息存储在服务器端

缺点:耗费服务器内存

优点:相对cookie安全


php.ini中session的配置:

1.session.auto_start = false;//是否自动开启session(不建议开启)

2.session.save_path;  //session文件保存路径

//关闭浏览器,客户端cookie过期,过期后服务器端会重新生成新sessionid文件

3.session.cookie_lifttime = 0; 


session中的垃圾回收:

1.当客户端中保存sessionid的cookie过期,服务器会新建一个文件,原来的一个就会成为垃圾

2.当用户长时间未操作(即session文件修改时间超过一定设置),删除文件

php.ini配置文件

session.gc_maxlifetime = 15 //15秒回收一次。超过15秒的文件会被回收

3.垃圾回收器的启动频率

session.probability = 1

session.divisor = 1000

在点击1000次中的某次启动一次


session_start()函数的作用:

1.向客户端发送一个保存sessionid的cookie

2.服务器端建立一个名为sessionid的文件


场景:

网站访问量过大时,一台服务器往往不足与支持高并发的。这时我们就要使用负载均衡,利用多台机器进行分流。

多台机器存储session又会出问题,所以决定只用一台机器存储所有session,然后共享给所有的机器,但是一台机器存储session,数据量会过大,造成存取缓慢。这时我们可以使用数据库,或者memcache存储(这个是存储最快的)


session的3种储存机制:

1.文件(文件存储数据是session默认的存储机制)

php.ini配置文件

1)修改session的存储方式

session.save_handler = files

2)修改session的保存路径

session.save_path = 'D:/sessionfile'

缺点:当网站访问量大时,造成文件太多,查找费劲


2.数据库

php.ini配置文件

1)修改session的存储方式

session.save_handler = user

2)注册session周期函数

session_set_save_handler('open','close','read','write','destroy','gc');

这个函数会在session_start()之前调用

3)在自定义函数中可以进行数据库操作

4)表结构(建议使用内存表):

     session id

     修改时间

     session数据

     ip

    user_agent(浏览器)


3.memcache

1)安装memcache

2)增加memcache的扩展到php.ini配置文件中

3)修改session的存储方式

session.save_handler = user

4)注册session周期函数

session_set_save_handler('open','close','read','write','destroy','gc');

这个函数在session_start之前调用

5)在自定义函数中进行memcache操作


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学