2021-10-26

PHP中怎样完成Session的设置、获取和删除?

在之前的文章中给大家带来了《PHP中怎样完成Cookie的创建、读取和删除?》,其中详细的介绍了应该怎样在PHP中创建、读取和删除cookie,本篇我们来看一看PHP中设置、获取和清除session。希望对大家有帮助!

在之前的文章中,我们介绍了客户端用来储存用户数据的cookie,本篇我们来看一下在PHP中占有非常重要地位的session,session是一种服务器端的机制,也是用来保存信息的,相比于保存在客户端的cookie,保存在服务器端的session用户是无法禁用的,同一个客户端每次和服务端交互时,不需要每次都传回所有的cookie值,只需要传回一个ID就可以了,这个ID是第一次访问服务器的时候生成的,并且是唯一的。

那接下来就来看一看到底什么是session,应该怎样去设置、获取和删除session吧

什么是session

session中文意思是会话,它用来储存使用者的相关资料的,这与cookie类似,例如用户名、个性化设置等等,与cookie不同的是,cookie是将资料保存在客户端的电脑中,用户可以禁用;而session是将数据保存在服务器系统下。网页是无状态的程序连接,无法记录用户的状态,因此通过session来记录用户的相关信息就显得尤为重要。

当开启一个session是,PHP会随机的创建一个sessionID,每个用户的sessionID是唯一的。这个sessionID在客户端与服务器端都会有保存的位置,保存在客户端会使用cookie的指定目录里;在服务器端回忆文本的形式保存到指定的session目录里。

与cookie相比,session是有很多优势的:

因为session的数据不会在客户端与服务器端来回的反复传递,所以通常情况下session还是更安全的;session能够存储的信息比cookie要多很多;用户可以禁用cookie,但是有方法能够是session正常工作。

了解了什么是session后,接下来看一看应该怎样去开启session。

开启session

不同于cookie,使用cookie可以直接创建,而在使用session之前必须先启动,目的是为了让PHP中的核心程序能够将session相关的内建环境预先加载到内存中。

在PHP中通过session_start()函数可以实现开启session的目的,函数session_start()的语法格式如下:

session_start ([array $options = array()])

其中需要注意的是:

$options是一个可选函数,是一个关联数组,并且这个数组中的键不需要包含session.前缀。

示例如下:

<?php
    session_start([
        'cookie_lifetime' => 60*60*24,  // 设置 cookie 的有效时间为 1 天
    ]);
    echo 'Session ID 为:'.$_COOKIE['PHPSESSID'];
?>

输出结果:

1026.04.png

需要注意的是:调用 session_start() 函数会生成一个唯一的 Session ID,并保存在浏览器的 Cookie 中,默认名称为“PHPSESSID”。同时,在本地目录中生成一个以“sess_”加上 Session ID 组成的 Session 文件,用来存储 Session 中的数据,输出结果:

1026.05.png

通过上述实例,已经了解到了应该怎样去开启session,那接下来看一下应该怎样去设置和获取session

设置和获取session

在上文中,启动了session之后,想要使用session变量,还需要经过设置和获取session中的数据,想要完成这些还需要通过$_SESSION数组来完成。使用$_SESSION之前必须要先试用session_start()函数来开启session才可以。

$_SESSION 为一个关联数组,和普通关联数组键值对的含义相同。设置 Session 的语法格式如下:

$_SESSION[名称] = 值;

示例如下:

<?php
    session_start();
    $str = '好好学习';
    $arr = ['Session','$_SESSION'];
    $_SESSION['study']  = $str;
    $_SESSION['study1']   = '天天向上';
    $_SESSION['title'] = $arr;
    foreach ($_SESSION as $key => $value) {
        if(is_array($value)){
            echo $key.':';
            print_r($value);
        }else{
            echo $key.' = '.$value.'<br>';
        }
    }
?>

输出结果:

1026.06.png

运行后需要注意的是:会将这几个变量或数组保存到 $_SESSION 中,还会被保存到服务器端由“sess_”和 Session ID 所命名的文件中,这个文件的位置可以通过修改 php.ini 配置文件或使用 session.save_path 配置。

上文中已经了解了怎样开启、设置和获取session,接下来看一下应该怎样删除session。

删除单个session

删除单个session元素需要通过unset()函数,该函数可以释放指定的变量,相当于直接注销掉数组中的元素,他的语法格式如下:

unset(mixed $var [, mixed $...])

其中需要注意的是:

$var 为要释放的变量,unset() 函数可以接收多个参数,参数之间使用,分隔。

实例如下:

<?php
    session_start();
    echo '<pre>';
    $str = '好好学习';
    $arr = ['删除 Session','$_SESSION'];
    $_SESSION['study']  = $str;
    $_SESSION['study1']   = '天天向上';
    $_SESSION['title'] = $arr;
    echo '定义一个 Session,如下所示:<br>';
    print_r($_SESSION);
    echo '删除 Session 中名为 title 的元素:<br>';
    unset($_SESSION['title']);
    print_r($_SESSION);
?>

输出结果:

1026.07.png

如此便通过unset()函数完成了删除session单个元素了。

删除session多个元素

如果想要一次性删除多个 Session 元素,即一次注销所有的会话变量,可以通过将一个空的数组赋值给 $_SESSION 来实现

实例如下:

<?php
    session_start();
    echo '<pre>';
    $str = '好好学习';
    $arr = ['删除 Session','$_SESSION'];
    $_SESSION['study']  = $str;
    $_SESSION['study1']   = '天天向上';
    $_SESSION['title'] = $arr;
    echo '定义一个 Session,如下所示:<br>';
    print_r($_SESSION);
    echo '删除 Session 中名为 title 的元素:<br>';
    $_SESSION = array();
    print_r($_SESSION);
?>

通过将一个空的数组赋值给 $_SESSION 输出结果:

1026.08.png

还有一种方法就是通过session_unset() 函数来释放session中的所有元素,实例如下:

<?php
    session_start();
    echo '<pre>';
    $str = '好好学习';
    $arr = ['删除 Session','$_SESSION'];
    $_SESSION['study']  = $str;
    $_SESSION['study1']   = '天天向上';
    $_SESSION['title'] = $arr;
    echo '定义一个 Session,如下所示:<br>';
    print_r($_SESSION);
    echo '删除 Session 中名为 title 的元素:<br>';
    session_unset();
    print_r($_SESSION);
?>

输出结果与上述实例的结果相同,由此我们便通过两种方法可以删除session多个元素了。

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

以上就是PHP中怎样完成Session的设置、获取和删除?的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

  • 相关标签:PHP session
  • https://www.php.cn/php-weizijiaocheng-483394.html

    发表回复

    Your email address will not be published. Required fields are marked *