Home >Backend Development >PHP Tutorial >php开发之session
对比cookie,session文件中保存的数据是在php脚本中以变量的形式创建的,创建的session变量在生命周期(20分钟)中可以被跨页的请求所引用。另外session是存储在服务器端的会话,相对安全,并不像cookie有存储长度的限制。
session的工作原理
当启动一个session会话时,会生成一个随机的session_id,也就是session的文件名,此时session_id存储在服务器的内存中,当关闭页面时,此时id会自动注销,重新登录此页面,会重新生成一个随机的session_id。
session的功能
session在web技术中非常重要,由于网页是一种无状态的连接程序,因此无法得知用户的浏览状态。通过session则可以记录用户的有关信息,以供用户再次以此身份对web服务器提交要求时确认。例如:用户在浏览电子商务网站的时候,如果没有session,那么用户每次浏览就需要输入账户密码。
另外,session适用于存储信息量较少的情况。如果用户需要存储的信息量较少,而且对存储的内容不需要长期存储,那么使用session把信息存储到服务器端比较合适。
创建会话
创建会话的步骤如下:
启动会话→注册会话→使用会话→删除会话
1,启动会话
启动会话的方式有两种,一种是使用session_start()函数,另一种是使用session_register()函数为会话登录一个变量来隐含地启动会话。
通过sesssion_start()函数创建会话,语法格式如下:
bool session_start(void);
通过session_register()函数来创建会话
session_register()函数用来为会话登录一个变量来隐含的启动会话,但要求设置php.ini文件的选项将register_globals指令指定为on,然后重新启动apache服务。
注意
使用session_register()函数,不需要调用session_start()函数,但是php会在变量注册后,隐含的调用session_start()函数。
2,注册会话
会话变量被启动后,全部保存在数组 SESSION中。通过数组 _SESSION 创建一个会话变量很容易。只要直接给该数组添加一个元素即可。
具体实例代码如下:
<?php session_start(); //启动一个session $_SESSION["admin"] =null; //声明一个名为admin的变量并赋空值 ?>
3,使用会话
首先需要判断一个会话变量ID是否存在,如果不存在就创建一个,并且使其能够通过全局数组$_SESSION进行访问。如果已经存在,那么就将已经注册的会话变量载入以供用户使用。
例如:判断用户名的session是否为空,如果不为空的话,则将此会话变量赋给$jackValue。
实例代码如下:
<?php if(!empty($_SESSION['session_name'])) //判断存储用户会话变量是否为空 { $jackValue =$_SESSION['session_name'];//将会话变量赋给一个变量$jackValue } ?>
4,删除会话
(1) 删除单个会话
删除会话变量,同数组的操作一样,直接注销$_SESSION数组中的某个元素即可。
具体如下:
unset($_SESSION[‘session_name’]);
(2) 删除多个会话
如果要一次注销所有的会话变量,可以将一个空的数组赋给 $_SESSION。
代码如下:
SESSION= array();
(3) 结束当前会话
如果整个会话已经结束,应该首先注销所有的会话变量,然后使用session_destroy() 函数清除当前的会话,并清空会话中的所有资源,彻底销毁session。
代码如下:
session_destroy();
5,设置session的失效时间
1,客户端没有禁止cookie
(1) 使用session_set_cookie_params()设置session的失效时间,此函数是session结合Cookie设置失效时间,如果让Session在1分钟后失效,实例代码如下:
<?php $time =1*60; //设置session的失效时间 session_set_cookie_params($time); //是用函数 session_start(); $_SESSION["userName"]="jack"; ?>
注意:
session_set_cookie_params()必须在session_start()之前使用
(2) 使用setcookie()函数设置session的失效时间
示例代码如下:
<?php session_start(); $time =1*60; setcookie(session_name(),session_id(),time()+$time,"/"); $_SESSION["user"]="jack"; ?>
其中session_name 是session的名字,session_id 是session用来识别客户端的标识,session_id 是随机产生的唯一名称,所以session是相对安全的。失效时间和cookie的失效时间一样,最后一个参数是可选的是用来指明cookie的路径。