美文网首页PHPPHP实战
session原理相关操作浅析

session原理相关操作浅析

作者: michaelgbw | 来源:发表于2016-07-02 23:22 被阅读245次

    文/michaelgbw

    之前,对于session,只知道session与cookie的区别在于:session是保存在服务器端,cookie保存在客户端。session怎么样保存的?以文件的形式保存。对应session的id号模糊不清。在开发中,非常有必要弄明白具体细节。不能停留在使用session_start()函数了,然后获取session值。不知道里面的机制,在开发中遇到了新的问题,解决起来比较费心。

    之前错误的session理解

    传说中,Web应用程序中的Session和Application保存服务器端,而cookie保存在客户端。
    其实是Session同时存在于客户端与服务器端。
    我们可以打开浏览器一探究竟

    <?php
    
    @session_start();
    $_SEESION['test']='test';
    print_r($_SEESION);
    ?>
    

    我们可以发现一个PHPSESSID的东西,创建Session的时候,服务器将生成一个唯一的sessionid然后用它生成一个关闭浏览器就会失效的cookie。
    之前知道session是根据文件存储的,可究竟在哪呢?我们打开php.ini,查找session.save_path = "XXXX",看起来这个好像是路径的样子

    哈哈,我们找到了对应的关系,即sess_PHPSESSID

    为什么是PHPSESSID呢?我们再打开php.ini


    php.ini的文档还是对于用户蛮友好的嘛,下面我们为了理解到底是怎么生成那个文件的,我们把当前页面的PHPSESSID删掉,然后f5,


    新生成了一个session,文件夹里也多了个文件。我是这样理解的:session_start,可以看成是创建一个session文件。假如有原来的session文件,或许没有创建。引入一个。往session文件中写值,那是代码“$SESSION['']=" "; 赋值所完成的操作。session_start()生成一个新的session文件名时。会判断是否存在cookie名为PHPSESSID的值。如果存在,那么就会按照它的值,组合成一个文件名"sess[phpcookie值]"。所以,在目录下,老是能够看到之前删除过的session文件名。

    还就那么多的session,不能老存着呀,


    session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/1000 意味着在每个请求中有 0.1% 的概率启动 gc 进程.

    那么如果是大型网站呢?或者存在二级域名间的跨域问题可以使用session_set_save_handler()来接管一起session活动,

    对于更深层次的理解我借鉴了这个文章http://www.jb51.net/article/26890.htm 推荐下~

    相关文章

      网友评论

        本文标题:session原理相关操作浅析

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