• 微信号
目录

php基础

您当前的位置:首页 > 我的笔记 > php基础>php与session技术

php与session技术

session概述

日常网上购物时,会发现无论页面怎么跳转,用户的登陆信息以及购买的商品信息都不会丢失。这是因为在使用浏览器进行页面访问时,都会通过session来记录这些重要信息。由于网页是一种无状态的链接程序,不能记录用户的浏览状态,因此session在web技术中占有非常重要的地位

session是一种服务器端的技术,它的生命周期从用户访问页面开始,知道断开与网站链接结束。web服务器在运行时可以为每个用户的浏览器创建一个供其独享的seesion文件

陵小宇博客-php与session会话技术

如图,session-A、session-B、session-C分别用来保存服务器为客户端1、客户端2、客户端3创建的session信息文件,但用户再去访问web服务器中的其他资源时,就可以直接从其都有的session信息文件中获取信息

在会话期间,但用户第一次访问服务器时,php都会自动生成一个唯一的会话id,用于标识不同的用户,session会话时,会话id会分别保存在客户端和服务器端两个位置,在客户端,使用临时的cookie保存在浏览器指定的目录中(称为session cookie),在服务器端,以文本文件形式保存在执行的session文件目录页中

陵小宇博客-php与session会话技术

首先,但客户端浏览器向web服务器发送url请求后,wen服务器会生成一个会话id,并将客户端浏览器的一些信息保存至web服务器中由会话id标识。然后,web服务器将会话id发送到浏览器端保存在cookie里。当浏览器在此像web服务器发送请求时,会将cookie中保存的会话id一并发送给web服务器,服务器根据接收到id处理不同的请求

启动session

在使用session之前,首先需要启动session。在php中使用session_start()函数启动session,其声明格式如下

bool session_start()

如果session启动成功,该函数返回true;否则返回false

案例:启动session

<?php
    session_start();
    echo "当前session的ID:".session_id();
?>

运行结果

陵小宇博客-php与session会话技术

注意:在调用session_start()之前不能有任何输出,包括空行和空格,有输出就会报错。因为http协议规定,http请求信息头必须在http请求内容发送之前发送,而且在session_strat()函数中已经封装了发送cookie的操作,这就意味着session_start()内部已经进行了一次发送头部的动作

向session添加数据

完成session启动后,web服务器会声明一个超全局数组$_SESSION[],用于保存用户特定数据,金各种数据添加到session中(不包括资源)必须使用超全局数组$_SESSION[],示例如下

$_SESSION['key']=$val;

key表示一个字符串,$val表示出资源类型外的任意类型的数据

案例:向session中添加数据

<?php
    session_start();
    $_SESSION['commodity']='手机'; //向$_SESSION[]数组中添加数据
    $_SESSION['price']='5888';
?>

读取session中的数据

在实际开发中,常常需要读取session中存储的数据,由于session中的数据都保存在超全局数组$_SESSION[]中,因此我们需要从超全局数组$_SESSION[]中读取数据,示例如下

$val=$_SESSION['key']

$val是一个变量,用于存储从session中获取的数据,可以是基本数据类型,也可以是数组或对象。key是$_SESSION[]数组中元素的下标

案例:读取session数据

<?php
    session_start();
    $_SESSION['commodity']='手机'; 
    $_SESSION['price']='5888';
    $goods=$_SESSION['commodity'];
    $price=$_SESSION['price'];
    echo "商品:".$goods."<br>";
    echo "价格:".$price."元<br>";
?>

运行结果

陵小宇博客-php与session会话技术读取session数据

删除session数据

服务器在收到用户退出网站请求时,需要删除该吃会话中的数据。在php中,有三种删除session中数据的方式。分贝时删除单个数据,删除所有数据和结束当前会话。

1.删除单个数据

删除单个数据通过unset()函数来完成,示例如下

unset($_SESSION['key']);

2.删除所有数据

如果想一次删除sessio中的所有数据,只需要将一个空的数组赋给$_SESSION[]即可

$_SESSION[]=array();

将空的数组赋给$_SESSION[]后,这样便实现了删除所有的数据。值得注意的是使用session_unset()函数也能达到删除所有数据的目的

3.结束当前会话

php提供了session_destroy()函数用于结束当前会话,调用函数注销会话并且删除会话中的所有数据,其声明格式如下:

bool session_destroy();

bool表示改函数为布尔型,如果函数注销成功返回true,否则返回false。调用该函数后,如果需要再次使用会话,必须重新调用session_start()函数重新启动会话

案例

<?php
    session_start();
    //指定删除某一个session数据
    unset($_SESSION['commodity']);
    //清空session的值
    $_SESSION=array();
    //销毁session会话
    session_destroy();
    echo "sessionid=".session_id();
?>

运行结果

陵小宇博客-php与session会话技术读取session数据

注意:

1.不能以unset($_SESSION[])的形式来调动unset()函数,这样会将超全局变量$_SESSION[]销毁,而且无法恢复,使用户不能在注册$_SESSION变量了

2.使用session_unset()函数或者$_SESSION[]=array()方式删除session中的所有数据时,session文件仍然存在,只不过它是一个空文件。通常情况下,我们需要将这个文件删掉,以节省资源。此时可以通过调用session_destroy()函数来达到目的