php通过会话控制实现身份验证实例
本文介绍了php通过会话控制实现身份验证实例,身份的验证是通过session提交数据的。有需要的朋友可以来了解一下。
会话控制的思想就是指能够在网站中根据一个会话跟踪用户。这里整理了详细的代码,有需要的小伙伴可以参考下。
概述
http 协议是无状态的,对于每个请求,服务端无法区分用户。PHP 会话控制就是给了用户一把钥匙(一个加密session字符串),同时这也是用户身份的一个证明,服务端存放了这把钥匙能打开的箱子(数据库,内存数据库或者使用文件做的),箱子里面装的就是用户的各个变量信息。
传统的php session 使用
<?php //page1.php 启动一个会话并注册一个变量 session_start(); $_SESSION['user_var'] = "hello,codekissyoung!"; //这里的可以将$_SESSION理解为用户的箱子,实际的实现是php在服务器端生成的小文件 ?>
<?php //page2.php session_start(); echo $_SESSION['user_var'];//通过钥匙访问自己的箱子内的变量 $_SESSION['user_var'] = "bey,codekissyoung!"; ?>
<?php //page3.php 销毁钥匙,一般在用户注销时,访问page3.php文件 session_start(); session_destroy(); ?>
提一个问题,钥匙呢?没看见给用户钥匙的操作啊?
这个操作是php背后帮我们做了的,自从你访问page1.php 程序运行,session_start();这句时,php 会根据此刻的一些条件(用户ip,浏览器号,时间等)生成一个PHPSESSID变量,http response 回客户端后,这个PHPSESSID就已经存在你的浏览器cookie里了,每次你再次访问这个域名时,该PHPSESSID都会发送到服务端。这个PHPSESSID 就是我这里说的用户钥匙了。
再一个问题,这个PHPSESSID的安全性,它是否容易被窃取,是否容易被伪造,是否容易被篡改?
使用 Https 可以防止被篡改。不使用PHPSESSID,而是自己生成一把秘钥给用户可以防止被伪造。至于是否容易被窃取,还真没怎么研究过。比如如果你电脑连着网,黑客入侵你电脑。
将生成的秘钥存入浏览器cookie中
设置cookie
setCookie('key','value',time()+3600);
删除cookie
setCookie('key','',time()-1);
实现单点登录:session共享
单点登录:多个子系统之间共用一套用户验证体系,在其中一处登录,就可以访问所有子系统。
试想这么一种情景:假设服务器A与B的php环境一致。用户在 服务器A 上拿到了自己的钥匙,然后他拿着这把钥匙去访问服务器B,请问服务器B认识么?
很显然不能,服务器A生成的钥匙,服务器并不认识。
解决办法:用户无论访问A或B,生成的钥匙我都存储在C(同一个数据库,或缓存系统)中,用户再次访问A或B时,A和B都去问下C:这个用户的钥匙对么?对的话,用户就可以使用自己存在A或者B那里的箱子了。
<?php session_regenerate_id();//重置 session 字符 $session_info=array('uid'=>$uid,'session'=>session_encrypt(session_id().time())); //下一步将,$session_info 存到 C 中 ?>
下面是php通过会话控制实现身份验证实例
身份验证应用程序主体:authmain.PHP
<?php //开启一个会话 session_start(); if((!isset($userid))||(!isset($password))) { $userid=$_POST['userid']; $password=$_POST['password']; //连接数据库 $db_conn=new mysqli("localhost", "root", "","auth"); if(mysqli_connect_errno()){ echo '连接数据库失败:'.mysqli_connect_error(); exit(); } //执行SQL查询语句 $query="SELECT * FROM authorized_users WHERE name='".$userid."' and password=sha1('".$password."')"; $result=$db_conn->query($query); if($result->num_rows>0){ //注册一个会话变量 $_SESSION['valid_user']=$userid; } //断开数据库连接 $db_conn->close(); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>身份验证</title> </head> <body> <h1>主页</h1> <?php //判断用户是否已经登录 if(isset($_SESSION['valid_user'])){ echo $_SESSION['valid_user'].',您好,你已经登录'; echo '<a href="logout.php">退出登录</a><br/>'; }else{ if(isset($userid)){ echo '您没有登录成功'; }else{ echo '您还没有登录<br/>'; } ?> <form method="post" action="authmain.php"> <p>用户名:<input type="text" name="userid"></p> <p>密码:<input type="password" name="password"></p> <p><input type="submit" name="submit" value="登录"></p> </form> <?php } ?> <br/> <a href="members_only.php">登录进入</a> </body> </html>
网站的有效用户检查:members_only.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>身份验证</title> </head> <body> <?php //启用会话 session_start(); echo '<h1>会员有效</h1>'; if(isset($_SESSION['valid_user'])){ echo "<p>".$_SESSION['valid_user'].",您好,您已经登录成功</p>"; echo '<p>会员可享受折扣优惠</p>'; }else{ echo '<p>您还没有登录成功</p>'; echo '<p>只有登录成功才能查看此页</p>'; } echo '<a href="authmain.php">返回主页</a>'; ?> </body> </html>
注销会话变量并销毁会话:logout.php
<?php //启用会话 session_start(); $olduser=$_SESSION['valid_user']; //注销会话变量 unset($_SESSION['valid_user']); //销毁会话 session_destroy(); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>退出登录</title> </head> <body> <h1>您退出登录了!</h1> <?php if(!empty($olduser)){ echo '退出登录了<br/>'; }else{ echo '您没有登录过,所以当然也不存在退出登录<br/>'; } ?> <a href="authmain.php">返回主页</a> </body> </html>
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
以上是php通过会话控制实现身份验证实例的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。
