session原理相关操作浅析

文/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的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_...
    寻回骄傲阅读 2,965评论 0 18
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,381评论 1 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,859评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,351评论 11 349
  • 1、session.gc_maxlifetime控制 session 有效期 PHP的session有效期默认是1...
    Uzero阅读 1,053评论 0 0