仓酷云
标题:
PHP教程之PHP的SESSION机制剖析
[打印本页]
作者:
蒙在股里
时间:
2015-1-16 22:13
标题:
PHP教程之PHP的SESSION机制剖析
要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。本篇文章次要先容一下phpsession手艺方面的文章。
1.session.save_handler=files
1.session_start()
(1)session_start()是session机制的入手下手,它有必定几率开启渣滓接纳,由于session是寄存在文件中,PHP本身的渣滓接纳是有效的,SESSION的接纳是要删文件的,这个几率是依据php.ini的设置决意的,可是有的体系是session.gc_probability=0,这也就是说几率是0,而是经由过程cron剧本来完成渣滓接纳。
session.gc_probability=1
session.gc_divisor=1000
session.gc_maxlifetime=1440//过时工夫默许24分钟
//几率是session.gc_probability/session.gc_divisor了局1/1000,
//不倡议设置太小,由于session的渣滓接纳,是必要反省每一个文件是不是过时的。
session.save_path=//仿佛分歧的体系默许纷歧样,有一种设置是"N;/path"
//这是随机分级存储,这个样的话,渣滓接纳将不起感化,必要本人写剧本
(2)session会判别以后是不是有$_COOKIE[session_name()];session_name()前往保留session_id的COOKIE键值,
这个值能够从php.ini找到
session.name=PHPSESSID//默许值PHPSESSID
(3)假如不存在会天生一个session_id,然后把天生的session_id作为COOKIE的值传送到客户端,相称于实行了上面COOKIE操纵,注重的是,这一步实行了setcookie()操纵,COOKIE是在header头中发送的,这之前是不克不及有输入的,PHP有别的一个函数session_regenerate_id()假如利用这个函数,这之前也是不克不及有输入的。
setcookie(
session_name(),
session_id(),
session.cookie_lifetime,//默许0
session.cookie_path,//默许/以后程序跟目次下都无效
session.cookie_domain,//默许为空
)
(4)假如存在那末session_id=$_COOKIE[session_name];然后往session.save_path指定的文件夹里往找名字为SESS_.session_id()的文件,读取文件的内容反序列化,然后放到$_SESSION中
2.为$_SESSION赋值
好比新增加一个值$_SESSION[test]=blah;那末这个$_SESSION只会保护在内存中,当剧本实行停止的时分,用把$_SESSION的值写进到session_id指定的文件夹中,然后封闭相干资本。这个阶段有大概实行变动session_id的操纵,好比烧毁一个旧的的session_id,天生一个全新的session_id.一半用在自界说session操纵,脚色的转换上,好比Drupal.Drupal的匿名用户有一个SESSION的,当它登录后必要换用新的session_id
<?phpif(isset($_COOKIE[session_name()])){setcookie(session_name(),,time()-42000,/);//旧sessioncookie过时}session_regenerate_id();//这一步会天生新的session_id//session_id()前往的是新的值
复制代码
3.写进SESSION操纵
在剧本停止的时分会实行SESSION写进操纵,把$_SESSION中值写进到session_id定名的文件中,大概已存在,大概必要创立新的文件。
4.烧毁SESSION
SESSION收回往的COOKIE一样平常属于立即COOKIE,保留在内存中,当扫瞄器封闭后,才会过时,假设必要工资强迫过时,好比加入登录,而不是封闭扫瞄器,那末就必要在代码里烧毁SESSION,办法有良多:
setcookie(session_name(),session_id(),time()-8000000,..);//加入登录前实行
usset($_SESSION);//这会删除一切的$_SESSION数据,革新后,有COOKIE传过去,可是没无数据
session_destroy();//这个感化更完全,删除$_SESSION删除session文件,和session_id
当不封闭扫瞄器的情形下,再次革新,2和3城市有COOKIE传过去,可是找不到数据
2.session.save_handler=user
用户自界说session处置机制,加倍直不雅
session_set_save_handler(open,close,read,write,destroy,gc);
(1)session_start(),实行open($save_path,$session_name)翻开session操纵句柄,$save_path在session.save_handler=files的情形下它就是session.save_path,可是假如用户自定的话,这个两个参数都用不上,间接前往TRUE。
实行read($id)从中读取数据.//这个参数是主动传送的就是session_id(),能够经由过程这个值举行操纵。
(2)剧本实行停止,实行write($id,$sess_data)//两个参数,很复杂。
(3)假设用户必要session_destroy(),先实行destroy,在实行第2步,一个实践例子:
<?php//SESSION初始化的时分挪用functionopen($save_path,$session_name){global$sess_save_path;$sess_save_path=$save_path;return(true);}//封闭的时分挪用functionclose(){return(true);}functionread($id){global$sess_save_path;$sess_file="$sess_save_path/sess_$id";return(string)@file_get_contents($sess_file);}//剧本实行停止之前,实行写进操纵functionwrite($id,$sess_data){echo"sdfsf";global$sess_save_path;$sess_file="$sess_save_path/sess_$id";if($fp=@fopen($sess_file,"w")){$return=fwrite($fp,$sess_data);fclose($fp);return$return;}else{return(false);}}functiondestroy($id){global$sess_save_path;$sess_file="$sess_save_path/sess_$id";return(@unlink($sess_file));}functiongc($maxlifetime){global$sess_save_path;foreach(glob("$sess_save_path/sess_*")as$filename){if(filemtime($filename)+$maxlifetime<time()){@unlink($filename);}}returntrue;}
复制代码
PHP成功的插入,删除,更新数据的时候,显然,你已经距离成功指日可待了。
作者:
飘灵儿
时间:
2015-1-19 05:24
实践是检验自己会不会的真理。
作者:
仓酷云
时间:
2015-1-26 19:40
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者:
兰色精灵
时间:
2015-2-4 21:00
当然这种网站的会员费就几十块钱。
作者:
若天明
时间:
2015-2-10 10:33
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年 具体的记不清啦,囧。
作者:
分手快乐
时间:
2015-3-1 10:31
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者:
灵魂腐蚀
时间:
2015-3-10 16:14
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者:
小妖女
时间:
2015-3-17 09:08
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2