之前对session的理解没有仔细研究过。最近遇到一些问题,需要解决session的配置问题,顺便查了一些资料。大部分资料都是网上的,自己整理一下,如有错误,希望大家指出,谢谢!PHP中session的相关配置,先看php.ini中session相关配置的解释。使用php-i|grep'php.ini'找到php.ini的文件目录位置,下面是php.ini的配置内容。参考官网??:SESSION配置[Session];定义处理器的名称来存储和检索与会话关联的数据。默认是文件;用于存储/检索数据的处理程序。;http://php.net/session.save-handler;session也可以存储在redis中,对应key:PHPREDIS_SESSION:d7sq31qsvtcpsl6khacn068dg3;session.save_handler=redissession.save_handler=files;session.save_path定义传递给保存处理程序的参数。如果选择默认文件文件处理程序,则此值为创建文件的路径。默认是/tmp;redis对应的设置;session.save_path="tcp://127.0.0.1:6379?auth=123456"session.save_path="/tmp";session.use_cookies指定是否使用cookies来存储客户端的SessionID。默认为1(启用)。;如果为1,则可以在浏览器的Cookies中看到本次session的sessionid。session.use_cookies=1可以以chrome为例:;指定是否仅使用cookie在客户端存储会话ID。.启用此设置可防止涉及通过URL传递会话ID的攻击。此设置是在PHP4.3.0中添加的。自PHP5.3.0起,默认值更改为1(启用)。session.use_only_cookies=1;会话名称(用作cookie名称)。session.name指定用作cookie名称的会话名称。只能由字母数字字符组成,默认为PHPSESSID,对应session_name()session.name=PHPSESSID;在请求启动时初始化会话。;session.auto_start指定会话模块是否在请求开始时自动启动会话。默认为0(不启动)session.auto_start=0;session.cookie_lifetime指定发送到浏览器的cookie的生命周期,以秒为单位。值0表示“直到浏览器关闭”。默认为0;cookie的生命周期(以秒为单位),如果为0,则直到浏览器重新启动。session.cookie_lifetime=0;session.gc_probability和session.gc_divisor一起用来管理gc(garbagecollection垃圾回收)进程启动的概率。默认为1session.gc_probability=1;session.gc_divisor和session.gc_probability共同定义了每次session初始化时启动gc(garbagecollection垃圾回收)进程的概率。这个概率是使用gc_probability/gc_divisor计算的。例如,1/100表示有1%的概率在每个请求上启动gc进程。session.gc_divisor默认为100。session.gc_divisor=1000;session.gc_maxlifetime指定数据被视为“垃圾”并清除之前的秒数。垃圾收集可能会在会话开始时开始(取决于session.gc_probability和session.gc_divisor);在此秒数之后,存储的数据将被视为“垃圾”;由垃圾回收进程清理。session.gc_maxlifetime=3600;指定是否启用透明SID支持。默认为0(禁用),比如设置为1就可以使用url传递session.use_trans_sid=0session生命周期参考这两篇文章:如何设置严格的30分钟过期SessionPHPsession(session)生命周期概念介绍和设置更改和回收会话由服务器创建。如果在php程序的php.ini中没有配置session.auto_start=1,只有使用session_start才会创建。session_start()将创建一个新会话或重用现有会话。如果通过GET或POST或使用cookie提交会话ID,则现有会话将被重用。当会话通过session_start()自动或手动启动时,PHP在内部调用会话管理器的打开和读取回调。会话管理器可能是PHP的默认设置,也可能是由扩展(SQLite或Memcached扩展)提供的,也可能是由session_set_save_handler()设置的用户自定义会话管理器。read回调函数返回的已有session数据(以特殊序列化格式存储),PHP会自动反序列化数据并填充$_SESSION超级全局变量严格控制30分钟过期的SessionclassSession{/***setsession*@param[type]$name[description]*@param[type]$data[description]*@paraminteger$expire[description]*/publicfunctionset($name,$data,$expire=300){$sessionData=[];$sessionData['数据']=$数据;$sessionData['expire']=time()+$expire;$_SESSION[$name]=$sessionData;}/***getsession*@param[type]$name[description]*@return[type][description]*/publicfunctionget($name){if(!isset($_SESSION[$name])){返回假;}if($_SESSION[$name]['expire']>time()){return$_SESSION[$name]['data'];}else{self::clear($name);}返回假e;}/***清除会话*@param[type]$name[description]*@return[type][description]*/privatestaticfunctionclear($name){if(isset($_SESSION[$name])){未设置($_SESSION[$name]);}}}session的作用(1)最常用的大概是用来存放用户的登录信息(2)还有上面提到的优惠券需要注意的问题(1)不要使用setcookie()将数据存储在服务器端,非常不安全(2)session.auto_start=0最好用0,如果是提供API服务,会产生很多session,占用资源扩展知识session一致性架构设计分布式会话存储
