1.什么是session
Session可以实现客户端和Web服务器的会话,Session数据也以“键-值”对的形式存储在文件中。在会话存续期间,Web服务器上的各页面都可以获取Session数据,从而了解与客户端沟通的历史记录。从而避免用户在浏览不同页面时重复输入数据(例如重复登录)。每个Web站点会给每个访问者分配一个会话ID(SID,session_id)。用户第1次访问Web站点时会得到Web服务器分配的会话ID,以后每次浏览器提交请求都会带上这个会话ID,所有Session数据都与会话ID相关联。Session数据保存在服务器端,因此即使浏览器意外关闭,服务器端的Session数据也不会马上被释放。只要有SID,就可以获取对应的Session数据。当会话过期或被放弃后,服务器将终止该会话。
在PHP开发中对比起Cookie,session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 session 的使用。
2.session工作原理:
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
用户第1次访问Web站点时会得到Web服务器分配的会话ID,以后每次浏览器提交请求都会带上这个会话ID,所有Session数据都与会话ID相关联。Session数据保存在服务器端,因此即使浏览器意外关闭,服务器端的Session数据也不会马上被释放。只要有SID,就可以获取对应的Session数据。当会话过期或被放弃后,服务器将终止该会话。
启动新会话或者重用现有会话
语法:bool session_start ([ array $options = [] ] )
- 参数:options
此参数是一个关联数组,如果提供,那么会用其中的项目覆盖 会话配置指示 中的配置项。此数组中的键无需包含 session. 前缀。 - 返回值:成功开始会话返回 TRUE ,反之返回 FALSE
- 要想使用命名会话,请在调用 session_start() 函数 之前调用 session_name() 函数。
- -
//session_start()启动新会话
<?php
header("content-type:text/html;charset=utf-8");
error_reporting(0);
session_start();
echo("session_id()=".session_id()); //查看新会话id
echo("<br>");
echo("session_name()=".session_name()); 查看新会话name
?>
unset — 释放给定的变量
void unset ( mixed var[,mixed v a r [ , m i x e d … ] )
<?php
// 销毁单个变量
unset ($foo);
// 销毁单个数组元素
unset ($bar['quux']);
// 销毁一个以上的变量
unset($foo1, $foo2, $foo3);
?>
释放所有的会话变量
void session_unset ( void )
调用 session_ unset()函数后,Session变量$_ SESSION[’ session_name’]被释放,但session ID并没有被 释放。
返回值无
销毁一个会话中的全部数据
bool session_destroy ( void )
session_destroy() 销毁当前会话中的全部数据, 但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。 如果需要再次使用会话变量, 必须重新调用 session_start() 函数。
通常情况下,在你的代码中不必调用 session_destroy() 函数, 可以直接清除 $_SESSION 数组中的数据来实现会话数据清理。
返回值:返回成功时返回 TRUE, 或者在失败时返回 FALSE。
实例:
访问网页次数
<?php
header("content-type:text/html;charset=gbk");
error_reporting(0);
//last_visit 用于保存上次访问网页的时间,num_visits用于保存访问网页的次数
date_default_timezone_set('Asia/Chongqing'); //系统时间差
//;是设置time()函数的时区,
//因为time()函数返回的时间戳是会受到时区限制的,默认是0时区。如果不进行任何修改的话,
//输出的time()对于我们来说会相差8个小时。
//开始会话
session_start();
if($_SESSION["last_visit"])
{
echo"您上次访问的时间为:";
echo date("Y-m-d,H:i:s",$_SESSION['last_visit']); //data()函数用于格式化一个本地时间,
//返回指定格式返回时间字符串
echo "<br />" ;
echo "访问次数:".$_SESSION['num_visits'];
}
else
echo "这是第一次访问";
$_SESSION["last_visit"]=time();
echo "<br />";
echo(date("Y-m-d,H:i:s",time()));
$_SESSION["num_visits"]++;
//一旦关闭浏览器,session数据就丢失了
?>