Blogger Information
Blog 13
fans 0
comment 0
visits 11330
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
会话机制
莫名的博客
Original
1067 people have browsed it

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操作


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post