SESSION 详解

@liubb  December 1, 2017
ini_set('display_errors', 1);
error_reporting(E_ALL);
//setcookie('PHPSESSID', 'cr4s57qd3hsusrd3e2p0c576u7');
//$_COOKIE['PHPSESSID'] = 'cr4s57qd3hsusrd3e2p0c576u7';
//echo 12;
//Session_Start();

//$_SESSION['test'] = '123';
//$_SESSION['as'] = '123';
////unset;
var_dump($_SESSION['test']);
var_dump($_SESSION['as']);
var_dump(session_name());        //PHPSESSID
var_dump(session_id());          //一串字符串
////Session_destroy();
//
//cr4s57qd3hsusrd3e2p0c576u7

打开session_start()
页面会生成一个cookie PHPSESSID = cr4s57qd3hsusrd3e2p0c576u7 字符随机

再该cookie下设置几个session值

如果清除cookie 几个session值丢失

如果手动创建该cookie 同样能得到在cookie时创建的session值

SESSION过期时间

1、session.use_cookies:默认的值是“1”,代表SessionID使用Cookie来传递,反之就是使用Query_String来传递;

2、session.name:这个就是SessionID储存的变量名称,可能是Cookie,也可能是Query_String来传递,默认值是“PHPSESSID”;

3、session.cookie_lifetime:这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以Session不能永久使用!

4、session.gc_maxlifetime:这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除!

站点A的gc_maxlifetime设置为2小时,站点B的 gc_maxlifetime设置为默认的24分钟。当站点B的GC启动时,它会扫

描公用的临时文件目录,把所有超过24分钟的session文件全部删除掉,而不管它们来自于站点A或B。这样,站点A的gc_maxlifetime设置就形同虚设了。

找到问题所在,解决起来就很简单了。修改session.save_path参数,或者使用session_save_path()函数,把保存session的目录指向一个专用的目录,gc_maxlifetime参数工作正常了。

还有一个问题就是,gc_maxlifetime只能保证session生存的最短时间,并不能够保存在超过这一时间之后session信息立即会得到删除。因为GC是按机率启动的,可能在某一个长时间内

都没有被启动,那么大量的session在超过gc_maxlifetime以后仍然会有效。


添加新评论