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应用只有一个会话,那么这个会话的信息是永远不会丢失的即使我们的会话已经过期。

  • 相关阅读:
    安卓自己定义View进阶-Canvas之绘制基本形状
    IOS UIPickView+sqlite 选择中国全部城市案例
    linux的主分区与逻辑分区的关系
    Qt:解析命令行
    Firefox默认英文修改中文
    autofs自动挂载
    telent对端口检测状态分析
    WinRAR5.4
    Centos6.5入侵清理
    Win10激活KMS
  • 原文地址:https://www.cnblogs.com/xiaodo0/p/3604556.html
Copyright © 2011-2022 走看看