PHP 会话控制(2)之session

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数据就丢失了
?>

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值