PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)

前言

每个账号操作的内容不一样,代表了账号之间的隔离性

账号:cyg 123456 (token请到数据库中对应的账号的token字段中获取)

liwen 123456

2.php

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <form action="2.php" method="POST">
    用户名:<input type="text" name="username">
    密码:<input type="password" name="password">
    <input type="submit" value="提交">
  </form>
</body>
</html>
<?php
//用户输入的(表单传过来的)
$username=$_POST['username'];
$password=$_POST['password'];
if(!$username||!$password)
{
  echo exit();
}
//=========================
$link=mysqli_connect('localhost','root','root','a');
//然后是指定php链接数据库的字符集
mysqli_set_charset($link,'utf8');
$token = md5(mt_rand(100000,999999).'#$@%!^*'.time());
//查询然后判断数据库中的用户名username+密码password是不是与表单传过来的$username+$password相匹配.
$sql="select * from  user where username='{$username}' and password='{$password}'";
$query=mysqli_query($link,$sql);//运行sql
$result=mysqli_query($link,"UPDATE user set stoken='{$token}' WHERE username='{$username}' and password='{$password}'");//运行sql
$result=mysqli_fetch_array($query);
echo "<script>alert('请到数据库中的user表对应的账号获取token');location.href='3.php';</script>";

3.php

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <form action="3.php" method="POST">
    只要提交token就能登录啦:<input type="text" name="token">
    <input type="submit" value="提交">
  </form>
</body>
</html>
<?php
$link=mysqli_connect('localhost','root','root','a');
//然后是指定php链接数据库的字符集
mysqli_set_charset($link,'utf8');
$tokenaa=$_POST['token'];
if(!$tokenaa)
{
  exit();
}
$sql="select id,username from user where stoken='{$tokenaa}'";
$aa=mysqli_query($link,$sql);
$result=mysqli_fetch_array($aa);
$id=$result['id'];
if($result)
  {
    echo "登录成功";
    echo "<a href='4.php?id=$id'>登录成功请点击</a>";
  }
  else
  {
    echo  "登录失败";
  }

4.php

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
<h1>请问你登录要进行什么操作吗???不想操作请点击这里</h1>
<a href="5.php?id=<?php echo $_GET['id']; ?>">点击进入您进行登录的账号的数据页面</a><br>
  <form action="4.php" method="POST">
     <textarea style="height:150px;width:200px;" name="content">
     </textarea>
    <input type="hidden" name="id" value="<?php echo $_GET['id'];?>">
        <input type="submit" value="提交">
  </form>
</body>
</html>
<?php
if(!$_POST['id'])
{
  exit();
}
if(!$_POST['content'])
{
exit();
}
$content=$_POST['content'];
$id=$_POST['id'];
$link=mysqli_connect('localhost','root','root','a');
//然后是指定php链接数据库的字符集
mysqli_set_charset($link,'utf8');
$sql = "INSERT INTO content(userid,content)
VALUES ('{$id}','{$content}')";
$result=mysqli_query($link,$sql);
if($result)
{
echo "<script>alert('创建成功');location.href='5.php?id=$id';</script>";
}
else
{
  echo "插入失败";
}
?>

5.php

<?php
$link=mysqli_connect('localhost','root','root','a');
//然后是指定php链接数据库的字符集
mysqli_set_charset($link,'utf8');
$sql="select * from content WHERE userid ='$_GET[id]'";//;
//模糊查询出像数据库中的title或者content里面的值或者说像数据库中的title或者content里面的某一段值相对应的就行了,就可以输出啦
$result=mysqli_query($link,$sql);//运行sql
?>
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <table border="1" cellpadding="5">
    <tr>
      <td>id</td>
      <td>种类</td>
      <td>物品</td>
    <?php 
      while ($row=mysqli_fetch_array($result)) {//把对象编程数组输出,不然会报错哦
        # code...
    ?>
    <tr>
      <td><?=$row['id'];?></td>
      <td><?=$row['content'];?></td>
      <td><?=$row['type'];?></td>
      <td><a href="update.php?id=<?php echo $row['id']; ?>">更新</a></td>
      <td><a href="delete.php?id=<?php echo $row['id']; ?>">删除</a></td>
    </tr>
    <?php 
    }
    ?>
    </tr>
  </table>
</body>
</html>

sql

-- phpMyAdmin SQL Dump
-- version 4.8.5
-- https://www.phpmyadmin.net/
--
-- 主机: localhost
-- 生成日期: 2022-10-09 19:40:15
-- 服务器版本: 5.7.26
-- PHP 版本: 7.3.4
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- 数据库: `a`
--
-- --------------------------------------------------------
--
-- 表的结构 `content`
--
CREATE TABLE `content` (
  `id` int(255) NOT NULL,
  `userid` int(255) NOT NULL,
  `content` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 转存表中的数据 `content`
--
INSERT INTO `content` (`id`, `userid`, `content`) VALUES
(1, 1, '4444444'),
(6, 2, 'aaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniodsaaaaadnodniods'),
(2, 1, '66666'),
(3, 1, '656666666666666666666666666666666666656666666666666666666666666666666666656666666666666666666666666666666666656666666666666666666666666666666666656666666666666666666666666666666666656666666666666666666666666666666666'),
(4, 2, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),
(5, 1, 'donds1nods1nos1nosdonds1nods1nos1nosdonds1nods1nos1nosdonds1nods1nos1nosdonds1nods1nos1nosdonds1nods1nos1nos');
-- --------------------------------------------------------
--
-- 表的结构 `user`
--
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `stoken` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 转存表中的数据 `user`
--
INSERT INTO `user` (`id`, `username`, `password`, `stoken`) VALUES
(1, 'cyg', '123456', '61dbd28e9d0ad58af53e35e1a6147df0'),
(2, 'liwen', '123456', '11fd8365c03d39d520e0179663ed0fa4');
--
-- 转储表的索引
--
--
-- 表的索引 `content`
--
ALTER TABLE `content`
  ADD PRIMARY KEY (`id`);
--
-- 表的索引 `user`
--
ALTER TABLE `user`
  ADD PRIMARY KEY (`id`);
--
-- 在导出的表使用AUTO_INCREMENT
--
--
-- 使用表AUTO_INCREMENT `content`
--
ALTER TABLE `content`
  MODIFY `id` int(255) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
--
-- 使用表AUTO_INCREMENT `user`
--
ALTER TABLE `user`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

效果

下面的时cyg账号


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
2月前
|
JavaScript 前端开发 安全
php学习笔记-普通表单参数提交获取及页面的重定向和一个登录小demo-day05
本文介绍了PHP中普通表单参数的提交获取、页面重定向的方法,并通过一个登录示例演示了表单参数的封装和页面跳转处理。
|
2月前
|
XML 前端开发 JavaScript
php中Ajax的简单使用,登录表单调用Ajax判断是否正确登录利用layer.msg进行提示
本文介绍了在PHP中如何使用Ajax进行登录表单的数据提交,并利用jQuery的$.post()方法与后端通信,以及使用layer.msg进行前端提示。
php中Ajax的简单使用,登录表单调用Ajax判断是否正确登录利用layer.msg进行提示
|
3月前
|
PHP
【Azure Developer】PHP网站使用AAD授权登录的参考示例
【Azure Developer】PHP网站使用AAD授权登录的参考示例
|
4月前
|
缓存 前端开发 小程序
uni-app结合PHP实现单用户登陆
一般APP做单用户登陆会使用第三方消息推送平台,虽然uni-app虽然也可以对接友盟,极光等推送平台。但还是因为时间,对接平台审核等流程时间不允许。之前使用gatewayworkman和websocket做了即时聊天,所以单用户登陆也使用websocket实现。
23 0
|
4月前
|
安全 数据安全/隐私保护
屏蔽修改wp-login.php登录入口确保WordPress网站后台安全
WordPress程序默认的后台地址wp-login.php,虽然我们的密码设置比较复杂,但是如果被软件一直扫后台入口,一来影响网站的速度增加服务器的负担,二来万一被扫到密码,那就处于不安全的境地。所以,我们最好将后台地址入口隐藏屏蔽起来,我们可以通过下面的命令实现隐蔽wp-login.php入口。
144 0
|
4月前
|
缓存 前端开发 PHP
【超详细】php实现扫码关注微信公众号系统/网站自动注册登录
【超详细】php实现扫码关注微信公众号系统/网站自动注册登录
288 0
|
5月前
|
PHP
php对memcached简单的操作
php对memcached简单的操作
36 0
|
5月前
|
SQL 关系型数据库 MySQL
php mysqli操作数据库
php mysqli操作数据库
34 0
|
6月前
|
安全 关系型数据库 MySQL
【PHP开发专栏】PHP PDO与MySQLi操作数据库
【4月更文挑战第30天】PHP数据库交互的核心是PDO和MySQLi。PDO提供数据访问抽象层,支持多种数据库,强调安全和灵活性;MySQLi则专为MySQL设计,有面向对象和过程化接口。两者都支持预处理语句,防止SQL注入。选择取决于项目需求,如可移植性、特定功能和API偏好。了解其使用有助于编写安全高效的代码。
105 2