网络安全编程——PHP基础Session详细讲解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


PHP Session

PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

作用

在计算机上操作某个应用程序时,打开它,做些更改,然后关闭它。这很像一次对话(Session)。计算机知道你是谁。它清楚在何时打开和关闭应用程序。然而,在Internet 上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道你是谁以及做了什么

PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。

然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。

bash 复制代码
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

如何创建session

把用户信息存储到 PHP session 中之前,首先必须启动会话。并且session_start() 函数必须位于 <html> 标签之前:

php 复制代码
<?php session_start(); ?>
 
<html>
	....
</html>

作用:执行代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID(唯一的)

举例

(1)比如说,我们创建一个php文件,打开:

并不会存在session以及任何Cookie:

(2)如果添加session代码:

可以看到就会随机为我们分配一个session;并且这个ID是唯一的


存储 Session 变量

存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

举例

(1)如果还想通过session存储信息的话:

系统还会生成相应的系统文件:

(2)然后我们如果把浏览器 关掉重新打开,又会生成一个新的session


销毁 Session

如果希望删除某些 session 数据,可以使用 ·unset()· 或 ·session_destroy()· 函数。

unset() 函数用于释放指定的 session 变量:

php 复制代码
<?php
session_destroy();
?>

举例

这里我们还是用之前的例子:

  • 前端输入账号密码
    • 如果输入正确,跳转到login.php页面;
    • 如果输入失败,跳转回index.php页面并alert弹窗提醒;
  • 后端进行校验:
    • 如果输入符合特定的session,将其跳转到login.php页面;
    • 否则显示"权限不足,无法访问"

index.php代码:

php 复制代码
<?php
session_start();
if($_POST["sub"]){
    $username = $_POST["username"];
    $password = $_POST["password"];

    if($username == "admin" && $password == "123456"){
		$_SESSION['username'] = $username;
        header("location: login.php");
        exit();
    }else{
        echo "<script>alert('账号或密码错误');</script>";
    }

}
?>

<html>
<form method="post" enctype="application/x-www-form-urlencoded">
    用户名:<input type="text" name="username"><br>
    密&nbsp;码:<input type="password" name="password"><br>
    <input type="submit" value="login" name="sub">
</form>
</html>

login.php代码:

php 复制代码
<?php
session_start();

if($_SESSION['username'] == 'admin'){
    echo "欢迎{$_SESSION['username']}登陆系统<br>";
    echo "<a href='login.php?c=logout'>退出</a>";
}else{
    echo "当前用户无权限访问";
}

if($_GET['c'] == 'logout'){
    # 两种方法销毁session,二选一即可;
    unset($_SESSION['username']);
    # session_destroy();
    header("location:index.php");
}

?>

结果如下:

(1)当我们尝试直接访问login.php页面时,权限不足:

(2)这里我们正常登陆,可以得到一个session

随后我们若是退出,再次登陆就会重新刷新session

对比session

也正是因为session在我们登陆后才会生成,这也就说明我们无法再像Cookie那样通过BP抓包来修改,造成越权登陆;

期待下次再见;

相关推荐
Zeku13 小时前
虚拟机网络设置
网络·stm32·freertos·linux驱动开发·linux应用开发
攻城狮在此13 小时前
华三交换机ACL配置(封禁内网高危端口)
网络·安全
123过去13 小时前
hashid使用教程
linux·网络·测试工具·安全
cdprinter13 小时前
信刻安全加密光盘,保障光盘保密安全
网络·安全·自动化
ForteScarlet13 小时前
从 Kotlin 编译器 API 的变化开始: 2.3.20
android·开发语言·后端·ios·开源·kotlin
xiaomo224914 小时前
javaee-网络原理2
网络
私人珍藏库14 小时前
[Android] 假装来电 v1.1.0
android·app·工具·软件·多功能
云边云科技_云网融合14 小时前
基于深度学习的设备监控技术:从被动报警到主动预警的革新
网络·人工智能·云计算
若年封尘14 小时前
告别手写 API 类型:用 openapi-fetch 打造类型安全的前端接口层
前端·安全·openapi-fetch
VOOHU-沃虎14 小时前
BMS隔离变压器技术解析:以WHS06A01A0为例
网络·工业控制