美文网首页PHP经验分享
session原理和过期时间

session原理和过期时间

作者: 江河湖海琴瑟琵琶 | 来源:发表于2019-10-25 14:17 被阅读0次

    站在服务器的角度来说,session是为了区分一个个的浏览器.需要浏览器的cookie配合.
    拿web页面用户登陆时的情况举例.
    1.用户 提供账号密码,发送到 服务器.
    2.服务器接收账号密码,与数据库进行匹配,匹配成功则证明是合法用户.
    3.服务器生成一个SESSION文件,并在里边写入一些内容,
    session文件命名通常是sess_随机字符串,如下是服务端的session文件:

    图片.png
    4.服务器把随机字符串返回给浏览器,一般存在浏览器的cookie中.
    如下图: 图片.png
    5.浏览器下次请求会带上cookie中的PHPSESSID(也就是上边那个字符串),服务器根据提交过来的字符串去寻找对应的session文件.能找到就说明这个浏览器是登陆过的,找不到就跳转到登陆页面.

    如果浏览器把cookie清空了,那服务器根本不知道去找哪个文件,所以只能跳到登陆页面让你重新登陆.

    这就又产生了新的问题.

    服务器上大量的SESSION文件如何处理

    每个用户访问,都会在服务器生成一个SESSION文件,用户量大的时候会有好多好多个文件,当用户关闭浏览器或者SESSION到期失效后,这些过期的文件该怎么办呢?
    PHP的处理方式是,定义一个过期回收机制 ,用来清理这些过期的SESSION文件.暂且把这个回收机制称为清理事件.
    关于配置,在php.ini中,主要有这几个参数:
    session.gc_probability -触发清理事件的分子(默认1)
    session.gc_divisor -触发清理事件的分母(默认1000)

    默认配置的参数是:分子/分母 = 1/1000时.表示,每次访问会有千分之一的概率触发清理事件.系统会扫描所有的SESSION文件,过期的删除,未过期的忽略.
    如果改成1/1则每次请求都会触发清理事件,但是这样做很明显会消耗更多的服务器资源.不建议.

    那什么样的文件算是过期呢?
    在php.ini里还有一个参数session.gc_maxlifetime默认是1440秒(24分钟),也就是说一个SESSION文件,超过24分钟没有被读写,则认为过期,清理事件触发时则会删除这个文件.
    但有一种可能是SESSION文件已经超过24分钟,此时清理事件还没有被触发,那么这个文件虽然过期了,但是仍然可以正常访问,这就是为什么我们在程序里设置expire没有效果的原因.

    其他的以后在补充吧.有说错的地方欢迎指正.

    相关文章

      网友评论

        本文标题:session原理和过期时间

        本文链接:https://www.haomeiwen.com/subject/qnpimctx.html