提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
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>
密 码:<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抓包来修改,造成越权登陆;
期待下次再见;