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

期待下次再见;

相关推荐
00后程序员张2 小时前
iOS 应用的 HTTPS 连接端口在网络抓包调试中有什么作用
android·网络·ios·小程序·https·uni-app·iphone
阿成学长_Cain2 小时前
Windows IP 配置查看器 ipconfig 详解
开发语言·php
电子科技圈2 小时前
BANF与芯科科技携手推出智能轮胎监测解决方案实现“最后的模拟领域”的数字化转型
网络·人工智能·嵌入式硬件·物联网·车载系统·智能硬件·交通物流
Qzkj6662 小时前
从风险失控到全程可控:高效好用、无故障、先进的金融API安全方案
大数据·安全·金融
binderIPC2 小时前
Android项目中FFmpeg的.so包使用详情
android·ffmpeg
2501_915909062 小时前
iPhone 手机日志实时查看,开发和测试中常用的几种方法
android·ios·智能手机·小程序·uni-app·iphone·webview
551只玄猫2 小时前
【高级程序设计 实验报告7】文件读写
c++·windows·课程设计·实验报告·高级程序设计
这也能行2 小时前
KeepAlived
运维·服务器·网络
ClassOps2 小时前
记录 Android WebView内核更新,安全区 和 Insets 消费问题
android·webview·compose