php session操作,php session用法

php session操作,php session用法,PHP SESSION机制的理解与实例

今天边肖给大家分享一个对PHP会话机制的理解和举例。边肖觉得内容挺好的,现在分享给大家,很有参考价值。有需要的朋友一起看看吧。

PHP有两种保存方式:session.save_handler=files和session.save_handler=user。PHP保存的具体方式可以通过配置php.ini文件来实现。

一、使用读写文件的方式保存 SESSION 数据(session.save_handler = files)

1、 session_start()

(1).SESSION_start()是会话机制的开始。启动垃圾回收是有一定概率的,因为会话是存储在文件中的,PHP自己的垃圾回收是无效的。会话的垃圾收集是删除文件。这个概率是根据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 _ divider的结果的1/1000,

//不建议设置太小,因为session的垃圾收集需要检查每个文件是否过期。

Session.save_path=//好像默认不同系统不一样。一个设置是‘n;/path

//这是随机分层存储。在这种情况下,垃圾收集将不起作用,您需要编写自己的脚本。

(2).会话将确定当前是否有$ _ COOKIE[session _ name()];Session_name()返回保存session_id的COOKIE的键值,可以从php.ini中找到

Session.name=PHPSESSID //默认值PHPSESSID

(3).如果不存在,会生成一个session_id,然后生成的session_id会作为COOKIE的值传递给客户端。

它相当于执行下面的COOKIE操作。注意,这一步执行setCOOKIE()操作,COOKIE在头中发送。在此之前不能有输出。PHP还有一个函数session_regenerate_id(),如果使用这个函数,在此之前不能有输出。

setcookie(session_name(),

会话标识(),

Session.cookie_lifetime,默认为//0

Session.cookie_path,//default/在当前程序和目录中有效。

Session.cookie_domain,//默认为空

)

(4).如果存在,则session _ id=$ _ cookie[session _ name];然后转到session.save_path指定的文件夹,找到名为“sessis _”的文件。会话标识();读取文件的内容被反序列化,然后放入$_SESSION。

2、为$_SESSION赋值

比如添加一个新值$ _ SESSION[ test ]= blah ;那么这个$_SESSION将只在内存中维护。脚本完成后,将$_SESSION的值写入session_id指定的文件夹,然后关闭相关资源。

在这个阶段,可以执行改变SESSION_id的操作,比如销毁一个旧的session_id,生成一个全新的session_id,其中一半用于自定义会话操作和角色转换。比如Drupal的匿名用户。Drupal有一个会话,登录时需要使用一个新的session_id。

if(isset($ _ COOKIE[会话名称()]){

setcookie(session_name(),,time() - 42000,/);//旧的会话cookie过期

}

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();//这个功能更彻底。Delete $_SESSION删除会话文件,以及session_id。

当你不关闭你的浏览器时,再次刷新它。COOKIE将从它们两个发送,但是找不到数据。

二、自定议session处理机制(session.save_handler = user)

用户自定义的会话处理机制更加直观。

* session _ set _ save _ handler( open , close , read , write , destroy , gc ).

1、session_start()

执行打开($保存路径,$会话名称)打开会议操作句柄;$保存路径在session.save_handler=文件的情况下它就是会话。保存路径,但是如果用户自定的话,这个两个参数都用不上,直接返回真实的

执行已读($id)从中读取数据;这个参数是自动传递的就是会话标识(),可以通过这个值进行操作。

2、脚本执行结束

执行

写入($id,$sess_data) //两个参数,很简单

3、假如用户需要session_destroy()

先执行摧毁。在执行第2步

一个实际例子:

//会话初始化的时候调用

函数打开($保存路径,$会话名称)

{

全局$ sess _ save _ path

$ sess _ save _ path=$ save _ path

返回(真);

}

//关闭的时候调用

函数关闭()

{

返回(真);

}

函数读取($id)

{

全局$ sess _ save _ path

$ sess _ file= $ sess _ save _ path/sess _ $ id ;

return(string)@ file _ get _ contents($ sess _ file);

}

//脚本执行结束之前,执行写入操作

函数写入($id,$sess_data)

{

回声“标清FSF”;

全局$ 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

}否则{

返回(假);

}

}

函数销毁($id)

{

全局$ sess _ save _ path

$ sess _ file= $ sess _ save _ path/sess _ $ id ;

return(@ unlink($ sess _ file));

}

函数垃圾收集器(最大生命周期)

{

全局$ sess _ save _ path

foreach(glob( $ sess _ save _ path/sess _ * as $ filename){

if(文件时间($文件名)$最大生存时间()){

@ unlink($ filename);

}

}

返回真实的

}

补充——涉及函数

session_start()。//开启会议回话,其中会话标识()的值是一次独立会话的标志

会话名称();//默认是PHPSESSID,在php.ini文件中可以自行配置。

会话标识();//在甜饼干中的体现是,会话名称为键,会话身份证明(identification)为值

设置cookie();//要想起作用,必须有页面的刷新

session _ destory();//session_destroy —销毁一个会话中的全部数据

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

php session操作,php session用法