session学习总结

来源:互联网 发布:blend4web 乳品厂源码 编辑:程序博客网 时间:2024/05/16 14:21

访问网站的时候经常需要会话控制相关的内容,或者说只要是需要跟踪用户的网站都需要用到绘画控制的内容。

在PHP中用于会话控制的技术有cookie和session,它们既有区别又有类似之处。首先说cookie,cookie是保存在客户端的,就相当于一个人自己办了一张会员卡,去该店消费的时候出事会员卡,一遍让商家知道自己是会员,可以享受相应的服务,session是保存在服务器端的,就好比是你办理了一个会员,但是没有会员卡,每次去商店的时候输出自己的卡号就行了。

cookie比较简单,就是在客户端保存一些信息,用户的信息被写入cookie之后,每次访问该项目目录下的其他文件时web服务器就会知道该用户的信息,从而达到跟踪用户的目的。
session有按照基于cookie的和基于url的,基于cookie的就是在cookie里面保存session ID,用户在成功登录,也就是注册session ID以后,用户访问这个项目目录下的其他文件的时候通HTTP的请求头将保存在客户端cookie里面的session ID携带过来,web服务器通过根据这个session ID可以找到session里面的信息,以便可以识别用户,跟踪用户。
但是我们都知道,在任何浏览器中,用户都可以禁用cookie,当用户禁用cookie以后,以上介绍的两种方式都不能在使用,但是session可以给予url传递,下面介绍给予url的session的使用方法。基于url的session就是将session的的信息通过url传递给web服务器。为什么在禁用cookie之后,给予cookie的session就不能够正常使用了呢,web服务器通过session识别一个用户是通过保存在客户端cookie里面的session ID实现的,在客户禁用cookie之后,session_start()函数在启动的时候,虽然想服务器申请了一个session ID但是这个session ID是不能够保存在cookie里面的,也就是用户访问其他页面的时候session_start()函数重新申请session ID,这个新申请的session ID当然和原先的不一样,所以web服务器也就不能跟踪这个用户了,这是基于url为什么就可以了呢,因为在用户第一次访问也就是登录的时候,web服务器为该用户分配了一个session ID,这时候用户在访问下一个页面的时候,在session_start()函数之前,通过session_id()这个函数告诉web服务器用户的session_id,这时候文本服务器就又可以跟踪用户了,具体就是在session_start()之前加上if(isset($_GET['sid'])){ session_id($_GET['sid']);},sid是我自己设定的参数名称,具体可以根据自己的情况和喜好来定,当然这时候你需要在页面有链接的时候都加sid以及其值。
当然你会说,禁用cookie的毕竟只是一小部分用户,这样做毕竟麻烦,这时候你可以不要那个if判断只在每个连接的后面加上SID这个常量,这时候如果客户端禁用了cookie,php会自动在url的后面加上一个以session name为键,以session ID为值得键值对,已达到和前面所说的url一样的效果,当然在用js跳转的时候这个方法是不行的,所以你要在那些以js跳转的地方加上按照url那种方式的键值对。开门见山吧,其实SID这种方式可以在php的配置文件中修改一个参数的方式实现,这个参数是session.use_trans_sid,你只需把它的参数设置为1就ok了,默认是0.
下面在说一下关于session过期时间的问题,简单说一下,这部分其实是大有文章可做的,你可以改变session的存储位置,按照自定义的方式来存储和处理,你可以自己配置一个NFS或者samba服务器,用一台服务器乃至一个服务器集群来处理session信息,当然如果你把所有用户的session信息都保存在文件夹里面,这是如果网扎的访问量非常大,这时候的IO开销是惊人的,当然也可以把session保存在数据库里面,数据库非常快,但是我们都知道,数据库是最容易出现瓶颈的地方,一旦数据多到一定程度,数据库恐怕也不行,那就用到MemCache,MemCache不多说,因为我也不怎么会,我知道它是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,来储存各种格式的数据。首先说几个在php配置文件里面关于session的配置项,session.cookie_lifetime指的是session在客户端的生存时间,默认是0,表示知道浏览器关闭。session.gc_maxlifetime指的是session在web服务器的生存时间,如果用户在网页上超过这个时间还没有刷新,保存在服务器的session文件便会过期,成为垃圾,这个时候php有自己的具体垃圾回收机制来回收这些垃圾,具体由session.gc_probability和session.gc_divsor来决定,前者除以后者的值就是启动垃圾回收机制的概率,比如他们的比值是1/10,就是在启动十次session_start()函数是,就会有一次启动垃圾回收机制去处理这些垃圾。
说道这里对session应该有一个差不多的介绍了。
0 0
原创粉丝点击