在PHP中会话处理是一个很重要的概念,它允许用户信息在网站或应用程序的所有页面上保持不变。下面本篇文章就来带大家学习一下PHP中会话处理的基础知识,希望对大家有所帮助。

PHP中什么是会话(session)?

会话(session)是一种在不同网页上保留信息的机制,用于在用户浏览网站或应用时识别用户。

大家一定会有这样一个疑问:为什么网站需要会话?讨论这个问题前,我们需要回过头来看看HTTP协议是如何工作的。

HTTP协议是无状态协议,这意味着服务器无法在多个请求之间记住特定用户。例如,当您访问网页时,服务器只负责提供所请求页面的内容。因此,当您访问同一网站的其他页面时,Web服务器会分别解释每个请求,就好像它们彼此无关。服务器无法知道每个请求都来自同一个用户。

下图简要描述了HTTP协议。

在这个过程中,如果想要显示特定用户的信息,则必须在每个请求中对用户进行身份验证。想象一下如果每次发出请求时,都需要进行在页面上输入用户名和密码进行身份验证;这样实在太繁琐了,根本不实用。而,会话(session)在这个时间就派上用场了。

会话(session)允许用户跨单个站点或应用程序的不同页面共享信息, 因此它有助于维护状态。这使服务器知道所有请求都来自同一用户,从而允许站点显示用户特定的信息和首选项。

下图描述了HTTP协议如何与会话一起使用。

PHP如何进行会话处理?

1、启动会话

每当想要处理会话变量时,就需要确保会话已经启动。有几种方法可以在PHP中启动会话。

1)、使用session_start函数

这是最常见到的方法,其中会话由session_start函数启动。

重要的是,session_start在将任何输出发送到浏览器之前,必须在脚本的开头调用该函数。否则,你会遇到臭名昭着的Headers are already sent错误。

2)、自动启动会话

如果需要在整个应用程序中使用会话,还可以选择自动启动会话而不使用session_start函数。

php.ini文件中有一个配置选项session.auto_start,允许我们为每个请求自动启动会话。默认情况下,它设置为0,我们可以将其设置1为启用自动启动功能。

2、获取会话ID

服务器为每个新会话创建一个唯一的id。如果要获取会话ID,可以使用该session_id功能,如以下代码段所示。

这应该给你当前的会话ID。该session_id函数很有趣,因为它也可以使用一个参数 - 一个会话ID。如果要将系统生成的会话ID替换为您自己的会话ID,可以将其提供给session_id函数的第一个参数。

重要的是要注意,当您想要使用自定义会话ID启动会话时,必须将session_id函数放在session_start之前调用。

3、创建会话变量

一旦启动会话,$_SESSION就会使用相应的会话信息初始化超全局数组。默认情况下,它使用空白数组初始化,您可以使用键值对存储更多信息。

下面我们通过代码示例来看看如何初始化会话变量。

如上所示,我们使用session_start函数在脚本开头启动了一个会话;之后,初始化了几个会话变量;最后,我们使用$_SESSION超全局访问了这些变量。

使用$_SESSION超全局将数据存储在会话中时,它最终存储在会话启动时创建的服务器上的相应会话文件中。通过这种方式,会话数据在多个请求之间共享。

正如我们所讨论的,会话信息在请求之间共享,因此在一个页面上初始化的会话变量也可以从其他页面访问,直到会话到期为止。通常,会话在浏览器关闭时到期。

4、修改和删除会话变量

我们可以像修改常规PHP变量一样修改或删除先前在应用程序中创建的会话变量。

下面通过示例来看看如何修改会话变量。

在上面的脚本中,我们首先检查了是否设置了$_session['count']变量。如果没有设置,我们将设置为1,否则我们将增加1。因此,如果多次刷新此页,可以看到计数器每次递增一个!

另一方面,如果想要删除会话变量,可以使用unset函数,如下面的代码段所示:

这样,我们就无法再访问$_SESSION[‘logged_in_user_id’]变量了。因为它已被unset函数删除。

5、销毁会话

在上面我们知道可以使用unset函数来删除特定的会话变量;那么如果要一次删除所有与会话相关的数据,我们要怎么办?

其实很简单,我们可以使用session_destroy函数。

下面我们来看看session_destroy函数是如何工作的。

说明:session_destroy函数删除存储在当前会话中的所有内容。因此,当存储在磁盘上的会话数据被session_destroy函数删除时,我们将从后续请求中看到一个空的会话变量。

注:通常,在用户注销时才会使用session_destroy函数

有需要学习交流的友人请加入交流群的咱们一起,群内都是1-7年的开发者,希望可以一起交流,探讨PHP,swoole这块的技术 或者有其他问题 也可以问,获取swoole或者php进阶相关资料私聊管理即可

别忘了点赞哦,定期分享干货

点此加入该群​jq.qq.com

如何在PHP中进行会话处理?的更多相关文章

  1. 如何在Linux中使用sFTP上传或下载文件与文件夹

    如何在Linux中使用sFTP上传或下载文件与文件夹 sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似. 然而,sFTP 比 FTP 更安全;它通过 ...

  2. 如何在Linux中自动删除或清理/tmp文件夹内容?

    每个Linux系统都有一个名为的目录/tmp,该目录已挂载了单独的文件系统. 它具有称为tmpfs的特殊文件系统.这是一个虚拟文件系统,操作系统将在系统引导时自动挂载/tmp挂载点. 如果要根据应用程 ...

  3. Linux入门进阶 - 如何在Linux中使用export命令

    来自:Linux迷链接:https://www.linuxmi.com/linux-export.html Linux export命令会标记哪些值需要传递给一组子进程.这是bash shell提供的 ...

  4. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  5. 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧

    做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...

  6. 如何在latex 中插入EPS格式图片

    如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...

  7. 如何正确的使用json?如何在.Net中使用json?

    什么是json json是一种轻量级的数据交换格式,由N组键值对组成的字符串,完全独立于语言的文本格式. 为什么要使用json 在很久很久以前,调用第三方API时,我们通常是采用xml进行数据交互,但 ...

  8. [原创]如何在Parcelable中使用泛型

    [原创]如何在Parcelable中使用泛型 实体类在实现Parcelable接口时,除了要实现它的几个方法之外,还另外要定义一个静态常量CREATOR,如下例所示: public static cl ...

  9. 如何在springMVC 中对REST服务使用mockmvc 做测试

    如何在springMVC 中对REST服务使用mockmvc 做测试 博客分类: java 基础 springMVCmockMVC单元测试  spring 集成测试中对mock 的集成实在是太棒了!但 ...

随机推荐

  1. 在javaweb中对于session的使用

    1.初次调用session时: String username="student"; HttpSession session=request.getSession(true);// ...

  2. 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ

    题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为两个整数m和n(1<=m,n<=10 ...

  3. Java基础 -4.5

    循环控制 在循环语句定义的时候还有两个控制语句:break.continue break主要的功能是退出整个循环结构 continue严格来讲只是结束当前的一次调用(结束当前循环) 当执行到了cont ...

  4. JavaWeb开发记录全过程--(1)环境配置

    一. 开发工具:idea 理由:根据idea 如何连接服务器,可以直接在idea上连接服务器 安装:根据IntelliJ IDEA 下载安装(含注册码),进行非常规手段使用idea 二.分析问题: # ...

  5. R语言 which() 、 which.min() 、 which.max() 函数

    函数 which() 可以用来找到满足条件的下标,如 x <- c(3, 4, 3, 5, 7, 5, 9) which(x > 5) 5 7 seq(along=x)[x > 5] ...

  6. Windows 控制台命令笔记

    1. cmd中输出中文乱码问题: CHCP是一个计算机指令,能够显示或设置活动代码页编号. C:\windows\system32>CHCP 活动代码页: 936 原因是我们使用了GBK编码,下 ...

  7. ng-repeat 设定select 选择项

    <select class="form-control m-b" name="FPermissionID" ng-model="mgfunc.F ...

  8. 从系统引导菜单禁用Hyper-V

    1, 从当前引导运行的系统复制一个新引导菜单项: bcdedit /copy {current} /d "Win10 NO_HV" 这时候cmd会输出新引导项的 guid, 复制出 ...

  9. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:制作一个小按钮

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. SpingBoot学习(一)

    一.概述 Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包, ...