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

期待下次再见;

相关推荐
AD钙奶-lalala5 分钟前
Android Studio新建项目默认不使用Compose模版
android·ide·android studio
飞Link7 分钟前
【TCP\UDP与可靠传输】UDP 的“简单粗暴”和它真正适用的场景
网络·网络协议·tcp/ip·udp
weixin_5206498716 分钟前
通信与TCP核心知识
服务器·网络·tcp/ip
liulilittle37 分钟前
我从 BBRv1 到 KCC 的思考
网络·c++·tcp/ip·计算机网络·tcp·bbr·通信
humors22138 分钟前
四种字母密码表示法
安全·网络安全·密码学
落羽的落羽39 分钟前
【项目】JsonRpc框架——开发实现1(细节功能、字段定义、抽象层、具象层)
linux·服务器·网络·c++·人工智能·算法·机器学习
shixuzhimeng1 小时前
FTP服务器项目
linux·网络·ftp
深度学习04071 小时前
SVN 独立服务端部署与客户端使用指南(CentOS/Rocky 9.5 + Windows)
windows·svn
爱分享软件的学长1 小时前
Tiled Map Editor 1.12.1 官方版下载(夸克网盘+百度网盘,SHA256校验)
windows·开源软件·软件下载