足球游戏_中国足彩网¥体育资讯$

php中session使用方法详解
来源:易贤网 阅读:622 次 日期:2014-10-20 15:41:57
温馨提示:易贤网小编为您整理了“php中session使用方法详解”,方便广大网友查阅!

session的声明与使用

session的设置不同于cookie,必须先启动,在php中必须调用session_start()。session_start()函数的语法格式如下:

bool session_start(void) //创建session,开始一个会话,进行session初始化

注意:session_start()函数之前不能有任何输出

当第一次访问网站时,seesion_start()函数就会创建一个唯一的session id,并自动通过http的响应头,将这个session id保存到客户端cookie中。同时,也在服务器端创建一个以session id命名的文件,用于保存这个用户的会话信息。当同一个用户再次访问这个网站时,也会自动通过http的请求头将cookie中保存的seesion id再携带过来,这时session_start()函数就不会再去分配一个新的session id,而是在服务器的硬盘中去寻找和这个session id同名的session文件,将这之前为这个用户保存的会话信息读出,在当前脚本中应用,达到跟踪这个用户的目的。 session以数组的形式使用,如:$_session['session名']

注册一个会话变量和读取session

在php中使用session变量,除了要启动之外,还要经过注册的过程。注册和读取session变量,都要通过访问$_session数组完成。在$_session关联数组中的键名具有和php中普通变量相同的命名规则。注册session变量的代码如下所示:

代码如下:

<?php

//启动session的初始化

session_start();

//注册session变量,赋值为一个用户的名称

$_session[username]=skygao;

//注册session变量,赋值为一个用户的id

$_session[uid]=1;

?>

执行该脚本后,两个session变量就会被保存在服务器端的某个文件中,该文件的位置是通过php.ini文件,在session.save_path属性指定的目录下。

注销变量与销毁session

当使用完一个session变量后,可以将其删除,当完成一个会话后,也可以将其销毁。如果用户退出web系统,就需要为他提供一个注销的功能,把他的所有信息在服务器中销毁。销毁和当前session有关的所有的资料,可以调用session_destroy()函数结束当前的会话,并清空会话中的所有资源。该函数的语法格式如下所示:

bool session_destroy(void) //销毁和当前session有关的所有资料

该函数并不会释放和当前session相关的变量,也不会删除保存在客户端cookie中的session

id。因为$_session数组和自定义的数组在使用上是相同的,所以我们可以使用unset()函数来释放在session中注册的单个变量。如下所示:

unset($_session['键名']);

一定要注意,不要使用unset($_session)删除整个$_session数组,这样将不能再通过$_session超全局数组注册变量了。但如果想把某个用户在session中注册的所有变量都删除,可以直接将数组变量$_session赋上一个空数组。如下所示:

$_session=array()

php默认的session是基于cookie的,session

id被服务器存储在客户端的cookie中,所以在注销session时也需要清除cookie中保存的sessionid,而这就必须借助setcookie()函数完成。在php脚本中,可以通过调用session_name()函数获取session名称。删除保存在客户端cookie中的session

id,代码如下所示:

代码如下:

<?php

//判断cookie中是否存在session id

if(isset($_cookie[session_name()])){

//删除包含session id的cookie,注意第四个参数一定要和php.ini设置的路径相同

setcookie(session_name(),'',time()-3600,'/');

}

?>

通过前面的介绍可以总结出,session的注销过程共需要4个步骤。在下例中,提供完整的四个步骤代码,运行该脚本就可以关闭session,并销毁与本次会话有关的所有资源。代码如下所示:

代码如下:

<?php

//第一步:开启session并初始化

session_start();

//第二部:删除所有session的变量,也可以用unset($_session[xxx])逐个删除

$_session = array();

//第三部:如果使用基于cookie的session,使用setcookkie()删除包含session id的cookie

if(isset($_cookie[session_name()])) {

setcookie(session_name(), , time()-42000, /);

}

//第四部:最后彻底销毁session

session_destroy();

?>

session的phpini配置选项

php.ini文件和session有关的几个常用配置选项:

session.auto_start = 0 ; 在请求启动时初始化session

session.cache_expire = 180 ; 设置缓存中的会话文档在 n 分钟后过时

session.cookie_lifetime = 0 ; 设置按秒记的cookie的保存时间,相当于设置session的过期时间,为0时表示直到浏览器被重启

session.auto_start=1,这样就无需每次使用session之前都要调用session_start()不建议使用.但启用该选项也有一些限制,如果确实启用了 session.auto_start,则不能将对象放入会话中,因为类定义必须在启动会话之前加载以在会话中重建对象。

session.cookie_path = / ; cookie的有效路径

session.cookie_domain = ; cookie的有效域

session.name = phpsessid; 用在cookie里的session的名字

session.save_handler = files ; 用于保存/取回数据的控制方式

session.save_path = /tmp ; 在 save_handler 设为文件时传给控制器的参数, 这是数据文件将保存的路径.

session.use_cookies = 1 ; 是否使用cookies

session的垃圾自动回收机制

可以通过session_destroy()函数在页面中提供一个“退出”按钮,通过单击销毁本次会话。但如果用户没有单击退出按钮,而是直接关闭浏览器,或断网等情况,在服务器端保存的session文件是不会删除的。虽然关闭浏览器,下次需要重新分配一个新的session id重新登录,但这只是因为在php.ini中的设置seesion.cookie_lifetime=0,来设定session id在客户端cookie中的有效限期,以秒为单位指定了发送到浏览器的cookie的生命周期。当系统赋予session有效期限后不管浏览器是否开启,session id都会自动消失。而客户端session id消失服务器端保存的session文件并没有被删除。所以没有被sessoin id引用的服务器端session文件,就成为了“垃圾”。

服务器保存的session文件就是一个普通文本文件,所以都会有文件修改时间。“垃圾回收程序”启动后就是根据session文件的修改时间,将所有过期的session文件全部删除。通过在php.ini中设置session.gc_maxlifetime选项来指定一个时间(单位:秒),例如设置该选项值为1440(24分钟)。“垃圾回收程序”就会在所有session文件中排查,如果有修改时间距离当前系统时间大于1440秒的就将其删除。

“session垃圾回收程序”是怎样的启动机制呢?“垃圾回收程序”是在调用session_start()函数时启动的。而一个网站有多个脚本,没有脚本又都要使用session_start()函数开启会话,又会有很多个用户同时访问,这就很可能session_start()函数在1秒内被调用n次,而如果每次都会启动“session垃圾回收程序”,这样是很不合理的。可以通过php.ini文件中修改“session.gc_probability和session.gc_divisor”两个选项,设置启动垃圾回收程序的概率。会根据“session.gc_probability/session.gc_divisor”公示计算概率,例如选项session.gc_probability=1,而选项session.gc_divisor=100,这样的概率就是“1/100”,即session_start()函数被调用100次才会有一次可能启动“垃圾回收程序”。

php.ini中相关的配置

session.cookie_lifetime=0; 关闭浏览器相应的cookie文件即被删除

session.gc_maxlifetime; 设置过期session时间,默认1440秒(24分钟)

session.gc_probability/session.gc_divisor; 启动垃圾回收机制的概率(建议值为1/1000——5000)

cookie禁用时通过url传递session的id

使用session跟踪一个用户,是通过在各个页面之间传递唯一的session id,并通过session id提取这个用户在服务器中保存的session变量。常见的session id传送方法有以下两种。

第一种方法是基于cookie的方式传递session id,这种方式更优,但不总是可用, 因为用户在客户端可以屏蔽cokie;

第二种方法是通过url参数进行传递,直接将session id嵌入到url中去。

在session的实现中通常都是采用cookie的方式,客户端保存的session id就是一个cookie。当客户禁用cookie时,session id就不能在cookie中保存,也就不能在页面之间传递,此时session失效。不过php5在linux平台可以自动检查cookie状态,如果客户端禁用它,则系统自动把session id附加到url上传送。而使用windows系统作为web服务器则无此功能。

在php中提出了跟踪session的另一种机制,如果客户浏览器不支持cookie,则php可以重写客户请求的url,把session id添加到url信息中。可以手动地在每个超链接的url中都加上一个session id,但工作量比较大,不建议使用这种方法。如下所示:

代码如下:

<?php

//开启session

session_start();

//在每个url后面附加上参数,变量名为session_name()获取名称,值通过session_id()获取

echo '<a href=demo.php?'.session_name().'='.session_id().'>连接演示</a>';

?>

在使用linux系统做服务器时,则在编辑php时如果使用了–enable-trans-sid配置选项,和运行时选项session.use_trans_sid都被激活,在客户端禁用cookie时,相对url将被自动修改为包含会话id。如果没有这么配置,或者使用windows系统作为服务器时,可以使用常量sid。该常量在会话启动时被定义,如果客户端没有发送适当的会话cookie,则sid的格式为session_name=session_id,否则就为一个空字符串。因此可以无条件地将其嵌入到url中去。在下例中使用两个脚本程序,演示了session id的传送方法。

<?php

session_start();

$_session[username]=admin;

echo session id:.session_id().<br>;

?>

通过url传递session id

在脚本test2.php中,输出test1.php脚本在session变量中保存的另一个用户名。又在该页面中输出一次session id,通过对比判断两个脚本是否使用同一个session id。另外,在开启或关闭cookie时,注意浏览器地址栏中url的变化。代码如下所示:

代码如下:

<?php

session_start();

echo $_session[username].< br>;

echo session id:.session_id().<br>;

?>

中国足彩网信息请查看IT技术专栏

中国足彩网信息请查看网络编程
易贤网手机网站地址:php中session使用方法详解
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 足球游戏_中国足彩网¥体育资讯$ 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65099533/13759567129 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标