网络安全编程——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抓包来修改,造成越权登陆;

期待下次再见;

相关推荐
蓝胖的四次元口袋12 分钟前
服务器网络与系统基础-面试题
服务器·网络
John Song1 小时前
ansible-playbook常用的检查命令
windows·ansible
Cx330❀1 小时前
【MySQL基础】一文吃透“表的约束”:从 Null/Default 到主外键的终极安全法则
linux·服务器·数据库·c++·mysql·安全
醉颜凉1 小时前
“三把钥匙开一把锁”:多签钱包深度解析与资产安全提升指南
安全·区块链
Haoxuekeji1 小时前
山东 AI 智能批改校园电子阅卷企业
大数据·人工智能·深度学习·安全·ai
程序员JerrySUN1 小时前
Jetson 刷机深度解析:flash.sh vs l4t_initrd_flash.sh(含安全与磁盘加密对比)
linux·网络·arm开发·安全·系统安全
视觉AI2 小时前
VS Code Remote-SSH 连接Jetson踩坑完整解决记录(网段不通+主机密钥变更双重故障)
运维·网络·人工智能·windows·ssh·边缘计算
银河麒麟操作系统2 小时前
闸机高效稳跑,通勤提速升级!银河麒麟赋能北京轨交新基建
运维·服务器·安全·交通物流
明志数科2 小时前
人形机器人格斗场景下的技术挑战:动力学控制、感知融合与实时决策
网络·数据库
酉鬼女又兒2 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github