php用户登陆与注销,利用会话控制实现页面登录与注销功能

该博客展示了如何使用PHP实现用户登录、记住登录状态、注销登录的功能,涉及SESSION和COOKIE的使用。同时,还详细介绍了许愿墙应用的实现,包括数据库交互、愿望的添加和删除,以及页面样式。代码中包含登陆页面login.php、处理登录action.php、首页index.php、添加愿望add.php和删除愿望delete.php等关键部分。
摘要由CSDN通过智能技术生成

详细内容

8bac0477aab7cc9eb35f60539736ae3c.png

首先是一个普通的登陆页面实现

49f6717f2cb4bbf35f498a2cc43abda9.png

登录页面login.php

登陆页

用户登录

用户名

class="form-control"

id="username"

name="username"

placeholder="请输入用户名">

密码

class="form-control"

id="password"

name="password"

placeholder="请输入密码">

class="form-check-input"

id="remember"

name="remember">

for="remember">

在这台电脑上记住我的登录状态

class="btn btn-primary">

登录

登录功能实现action.php<?php

session_start();

switch ($_REQUEST['action']) {

case 'login':

$username = $_POST['username'];

$password = $_POST['password'];

$remember = $_POST['remember'];

$user = getUser();

if ($username != $user['username']) {

// 登录失败

sendLoginFailedResponse();

}

if ($password != $user['password']) {

// 登录失败

sendLoginFailedResponse();

}

if ($remember) {

rememberLogin($username);

}

$_SESSION['username'] = $username;

header("location:index.php");

break;

case 'logout':

session_unset();

setcookie("username", "", time() - 1);

header("location:login.php");

break;

}

function getUser() {

return array(

"username" => "cyy",

"password" => "123456"

);

}

function sendLoginFailedResponse() {

$response = "

alert('用户名或密码错误!');

window.location='login.php';

";

echo $response;

die;

}

function rememberLogin($username) {

setcookie("username", $username, time() + 7 * 24 * 3600);

}

首页index.php

bb8c750452f74086a579d57c760ddf54.png<?php

session_start();

if (rememberedLogin()) {

$_SESSION['username'] = $_COOKIE['username'];

}

if (!hasLoggedIn()) {

header("location:login.php");

die;

}

function hasLoggedIn() {

return isset($_SESSION['username']) && validateUsername($_SESSION['username']);

}

function validateUsername($username) {

return $username == "cyy";

}

function rememberedLogin() {

return isset($_COOKIE['username']) && validateUsername($_COOKIE['username']);

}

?>

主页

使用 Cookie 和 Session 实现会话控制

type="button">

注销

会话控制实战内容一

SESSION 部分

实现用户认证功能,用户登录、退出与身份识别

会话控制实战内容二

COOKIE 部分

实现登录记住用户功能,七天免登录认证

会话控制实战内容一

SESSION 部分

实现用户认证功能,用户登录、退出与身份识别

会话控制实战内容二

COOKIE 部分

实现登录记住用户功能,七天免登录认证

接下来是会话控制实例:许愿墙源码

许愿墙首页index.php

180048f2f18a9696481b299d8ce79eb3.png

许愿墙

//连接数据库

$connection=mysqli_connect('127.0.0.1','root','123456');

if(mysqli_connect_error()){

die(mysqli_connect_error());

}

mysqli_select_db($connection,'wall');

mysqli_set_charset($connection,'utf8');

$sql="SELECT * FROM wall";

$result=mysqli_query($connection,$sql);

//显示留言

while($row=mysqli_fetch_assoc($result)){

$wish_time=$row['wish_time'];

$time=date('Y-m-d H:i:s',$wish_time);

$id=$row['id'];

//判断留言板颜色

switch($row['color']){

case 'a1':

echo "

break;

case 'a2':

echo "

break;

case 'a3':

echo "

break;

case 'a4':

echo "

break;

case 'a5':

echo "

break;

default:

echo "

break;

}

echo "

";

echo "{$row['name']}";

echo "No.{$row['id']}";

echo "

";

echo "

{$row['content']}";

echo "

";

echo "{$time}";

echo "";

echo "

";

echo "

";

}

mysqli_close($connection);

?>

添加愿望页面wish.php

282297e6d9fba3f580e6070c0239c82a.png

许愿墙

#content {

width: 638px;

height:650px;

margin:0 auto;

margin-top:100px;

/*background-color:#F0FAFF;

border:2px solid #C9F;*/

}

#content .c-top{

width: 638px;

height: 80px;

background: url(./Images/content_top.jpg) no-repeat;

}

#content .c-bottom{

width: 638px;

height: 50px;

background: url(./Images/content_bottom.jpg) no-repeat;

}

.c-content{

width: 638px;

height: 470px;

background: url(./Images/content_bg.jpg) repeat;

}

.papercolor{

width:588px;

height: 60px;

margin-left: 35px;

padding-top:15px;

}

.p-left{

float: left;

width: 120px;

line-height: 27px;

}p-left

.p-right{

float: left;

}

.color330{

float: left;

margin-left: 20px;

border-right: #404040 1px solid;

border-top: #404040 1px solid;

border-left:#404040 1px solid;

width: 25px;

cursor: pointer;

border-bottom: #404040 1px solid;

height: 25px;

}

.papercontent{

width: 588px;

height: 210px;

margin-left: 35px;

}

.left{

width: 294px;

height:100px;

float: left;

}

.right{

width: 294px;

height:100px;

float: left;

}

.left-top{

margin-bottom: 10px;

}

.left-bottom{

}

.right-top{

margin-bottom: 10px;

}

.right-bottom{

width:200px;

height:150px;

border: 1px solid orange;

margin-left:20px;

background-color:#E8DEFF;

}

.name{

clear: both;

width: 588px;

height: 50px;

margin-left: 35px;

margin-top:10px;

}

.name-left{

width:60px;

height: 26px;

line-height: 26px;

float: left;

}

.name-right{

float: left;

}

.name-right input{

width: 200px;

height: 26px;

}

.code{

clear: both;

width: 588px;

height: 50px;

margin-left: 35px;

margin-top:10px;

}

.code-left{

width:50px;

height: 26px;

line-height: 26px;

float: left;

}

.code-content{

width:100px;

float: left;

}

.code-content input{

width: 100px;

height: 26px;

}

.code-right{

float:left;

margin-left: 10px;

}

.code-right input{

width: 40px;

height: 26px;

background-color: pink;

}

.submit{

width:174px;

height:38px;

background: url(./Images/pic_submit.gif) no-repeat;

margin-left:217px;

}

.shuname{

width:80px;

height:25px;

margin-left: 120px;

}

span{

font-size: 13px;

font-family: "微软雅黑";

}

请选择纸条颜色:

输入你的祝福纸条内容:

纸条效果预览:

第x条

署名:

您的署名:

验证码:


//改变颜色

$(".color330").click(function(){

var value=$(this).css("background-color");

var idvalue=$(this).attr("id");

console.log(idvalue);

$("#idvalue").attr("value",idvalue);

$(".right-bottom").css("background-color",value);

})

//改变值触发的事件

var textfont = document.getElementById('textfont');

var font = document.getElementById('font');

textfont.οnchange=function(){

font.innerHTML=textfont.value;

}

//改变值触发的事件

var nameright = document.getElementById('nameright');

nameright.οnchange=function(){

document.getElementById("name").innerText="署名: "+nameright.value;

}

//在填写完毕验证码之后验证是否一致

var codeone = document.getElementById('codeone');

var codetwo = document.getElementById('codetwo');

//表单时区焦点事件

codeone.οnblur=function(){

//验证两次验证码是否一致

if(codeone.value != codetwo.value){

this.nextSibling.innerHTML='验证码不一致!'

this.nextSibling.style.color='red';

}

}

$( '#submit' ).click( function () {

window.location.href="add.php";

} );

新增愿望实现add.php<?php

// 获取表单提交数据

$name=$_POST['name'];

$textfont=$_POST['textfont'];

$wish_time=time();

$color=$_POST['idvalue'];

// 数据库操作

$connection=mysqli_connect('127.0.0.1','root','123456');

if(mysqli_connect_error()){

die(mysqli_connect_error());

}

mysqli_select_db($connection,'wall');

mysqli_set_charset($connection,'utf8');

$sql="INSERT INTO wall(content,name,wish_time,color) VALUES('$textfont','$name',$wish_time,'$color')";

$result=mysqli_query($connection,$sql);

if($result){

echo '';

}else{

echo '';

}

mysqli_close($connection);

?>

删除愿望delete.php

8f7fd8656b3a2f1d4777ad74de077c46.png<?php

//接受要删除的留言id

$num=$_GET['num'];

// 数据库操作

$connection=mysqli_connect('127.0.0.1','root','123456');

if(mysqli_connect_error()){

die(mysqli_connect_error());

}

mysqli_select_db($connection,'wall');

mysqli_set_charset($connection,'utf8');

$sql="DELETE FROM wall WHERE id=$num";

$result=mysqli_query($connection,$sql);

if($result){

echo '';

}else{

echo '';

}

mysqli_close($connection);

?>

附上数据库结构wall.sql-- phpMyAdmin SQL Dump

-- version 4.8.5

-- https://www.phpmyadmin.net/

--

-- 主机: localhost

-- 生成日期: 2019-08-18 22:08:38

-- 服务器版本: 8.0.12

-- 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 */;

--

-- 数据库: `wall`

--

-- --------------------------------------------------------

--

-- 表的结构 `wall`

--

CREATE TABLE `wall` (

`id` tinyint(4) NOT NULL COMMENT '留言编号',

`content` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '留言内容',

`name` varchar(20) NOT NULL DEFAULT '匿名的宝宝' COMMENT '署名',

`wish_time` int(11) NOT NULL COMMENT '留言时间',

`color` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '留言背景色'

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--

-- 转存表中的数据 `wall`

--

INSERT INTO `wall` (`id`, `content`, `name`, `wish_time`, `color`) VALUES

(17, '111', '111', 1566136880, 'a1'),

(19, '333', '333', 1566136894, 'a3'),

(21, '555', '555', 1566136911, 'a5'),

(24, '9999', '9999', 1566137235, 'a4');

--

-- 转储表的索引

--

--

-- 表的索引 `wall`

--

ALTER TABLE `wall`

ADD PRIMARY KEY (`id`);

--

-- 在导出的表使用AUTO_INCREMENT

--

--

-- 使用表AUTO_INCREMENT `wall`

--

ALTER TABLE `wall`

MODIFY `id` tinyint(4) NOT NULL AUTO_INCREMENT COMMENT '留言编号', AUTO_INCREMENT=26;

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 */;

知识点补充:

【使用 COOKIE 实现会话控制】

用于存储用户关键信息

保存在客户端(浏览器)

通过 HTTP 请求/响应头传输

d17125142da031c4698959a5e59820ab.png

【COOKIE 失效】

● COOKIE过期

● 用户手动删除 COOKIE

● 服务器清除 COOKIE 的有效性

【使用 SESSION 实现会话控制】

● 用于存储用户相关信息

● 保存在服务端

● 通过保存在客户端的 SESSION ID 来定位 SESSION 内容

79e797fd2a5a28f8591f1c2291a1bf2e.png

【SESSION 失效/清除】

● COOKIE过期(关闭浏览器)

● 用户手动删除 COOKIE

● 服务端删除 SESSION 文件或清空 SESSION 内容

更多相关php知识,请访问php教程!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值