zoukankan      html  css  js  c++  java
  • php中session的运行机制

    在PHP中session默认是以文件的形式存储于服务器的

    而客户端和服务端则是通过session_id来完成握手的,默认情况下PHP会将session_id存储于cookie中,用户每次请求时该session_id都会通过cookie传到服务器,下面是php.ini中的相关配置信息:

    session.save_path="C:xampp mp" 文件的存储路劲

    session.use_cookies=1 是否使用cookie存取session_id

    session.name=PHPSESSID 存储session_id的键名

    session.use_only_cookies=0 是否只使用cookie来处理session_id

    如何改变session的默认存储方式:

    在php中我们可以通过使用session_set_save_handler函数才改变这种默认方式,该方法有两种形式的重载

    php < 5.4 : 接受接受6个回调函数来执行session的管理SessionHandlerInterface

    打开(open):接受两个参数:1,文件路劲;2,session_id

    关闭(close)

    读取(read):读取session信息,接受一个session_id作为参数

    写入(write):将信息写入session,接受一个session_id作为参数

    销毁(destroy):销毁一个session,接受一个session_id作为参数

    回收(gc):当出发session回收时调用,接受一个session的过期时间(lifetime)作为参数

    php>=5.4 session_set_save_handler可以接受一个SessionHandlerInterface的实例来设置session的存储方式

    我们可以通过实现SessionHandlerInterface接口,或者重写SessionHandler类方法的实现,来编写自定义的session

    下面说说session的回收机制

    在php中session的回收时由session的回收频率和过期时间决定的,在php.ini中表现为

    session.gc_probability=1

    session.gc_divisor=100

    session.gc_maxlifetime=1440

    gc_maxlifetime很好理解,表示session的过期时间1440秒

    gc_probability/gc_divisor 为session回收的频率,这个怎么理解呢,每次在我们调用session_start()的时候我们都有可能调用gc方法对过期的session进行回收,如上面设置所示,这里回收的概率为1/100,如果用户的每次请求我们都去回收过期session可能会对服务器造成压力,特别是请求特别多的时候,所以往往session的回收频率应该根据站点的访问量来调节

    session_start细节

    session_start首先会生成一个session_id,默认情况下会将这个ID写入一个会话cookie,之后会调用open,read方法,生成全局变量$_SESSION,之后做gc处理,所以如果我们的web应用只有一个会话,那么这个会话的信息是永远不会丢失的即使我们的会话已经过期。

  • 相关阅读:
    如何判断DataSet里有多少个DataTable
    ADO.NET五大对象详解
    c# 中的封装、继承、多态详解
    什么是递归算法
    反射是什么
    什么是泛型
    方法中参数的类型详细
    Struts2学习笔记二 配置详解
    Struts2学习笔记一 简介及入门程序
    Hibernate学习笔记四 查询
  • 原文地址:https://www.cnblogs.com/xiaodo0/p/3604556.html
Copyright © 2011-2022 走看看