12 注冊登錄

12 注冊登錄

整體概述

使用數據庫連接池實現服務器訪問數據庫的功能,使用POST請求完成注冊和登錄的校驗工作。

本文內容

介紹同步實現注冊登錄功能,具體涉及到流程圖、載入數據庫表、提取用戶名和密碼、注冊登錄流程與頁面跳轉的代碼實現。
流程圖,描述服務器從報文中提取出用戶名密碼,并完成注冊和登錄校驗后,實現頁面跳轉的邏輯。
載入數據庫表,結合代碼將數據庫中的數據載入服務器中。
提取用戶名和密碼,結合代碼對報文進行解析,提取用戶名和密碼。
注冊登錄流程,結合代碼對描述服務器進行注冊和登錄校驗流程。
頁面跳轉,結合代碼對頁面跳轉機制進行詳解。

流程圖

描述GET和POST請求下的頁面跳轉流程。
在這里插入圖片描述

載入數據庫表

將數據庫中的用戶名和密碼載入到服務器的map中來,map中的key為用戶名,value為密碼。

//用戶名和密碼
map<string,string> users;void http_conn::initmysql_result(connection_pool *connPool)
{//先從連接池中取一個連接MYSQL *mysql=NULL;connectionRAII mysqlcon(&mysql,connPool);//在user表中檢索username,passwd數據,瀏覽器端輸入if(mysql_query(mysql,"SELECT username,passwd FROM user")){LOG_ERROR("SELECT error:%s\n",mysql_error(mysql));}//從表中檢索完整的結果集MYSQL_RES *result=mysql_store_result(mysql);//返回結果集中的列數int num_fields=mysql_num_fields(result);//返回所有字段結構的數組MYSQL_FIELD *fields=mysql_fetch_fields(result);//從結果集中獲取下一行,將對應的用戶名和密碼,存入map中while(MYSQL_ROW row=mysql_fetch_row(result)){string temp1(row[0]);string temp2(row[1]);users[temp1]=temp2;}
}

提取用戶名和密碼

服務器端解析瀏覽器的請求報文,當解析為POST請求時,cgi標志位設置為1,并將請求報文的消息體賦值給m_string,進而提取出用戶名和密碼。

//判斷http請求是否被完整讀入
http_conn::HTTP_CODE http_conn::parse_content(char *text)
{if(m_read_idx>=(m_content_length+m_checked_idx)){text[m_content_length]='\0';//POST請求中最后為輸入的用戶名和密碼m_string=text;return GET_REQUEST;}return NO_REQUEST;
}//根據標志判斷是登錄檢測還是注冊檢測
char flag=m_url[1];char *m_url_real=(char *)malloc(sizeof(char)*200);
strcpy(m_url_real,"/");
strcat(m_url_real,m_url+2);
strncpy(m_real_file+len,m_url_real,FILENAME_LEN-len-1);
free(m_url_real);//將用戶名和密碼提取出來
char name[100],password[100];
int i;//以&為分隔符,前面的為用戶名
for(i=5;m_string[i]!='&';++i)name[i-5]=m_string[i];
name[i-5]='\0';//以&為分割符,后面的是密碼
int j=0;
for(i=i+10;m_string[i]!='\0';++i,++j)password[j]=m_string[i];
password[j]='\0';

同步線程登錄注冊

通過m_url定位/所在位置,根據/后的第一個字符,使用分支語句實現頁面跳轉。具體的,

  • 0:跳轉注冊頁面,GET
  • 1,跳轉登錄頁面,GET
  • 5,顯示圖片頁面,POST
  • 6,顯示視頻頁面,POST
  • 7,顯示關注頁面,POST
//找到url中/所在的位置,進而判斷/后第一個字符
const char *p=strrchr(m_url,'/');//注冊頁面
if(*(p+1)=='0')
{char *m_url_real=(char *)malloc(sizeof(char)*200);strcpy(m_url_real,"/register.html");strncpy(m_real_file+len,m_url_real,strlen(m_url_real));free(m_url_real);
}//登錄頁面
else if(*(p+1)=='1')
{char *m_url_real=(char *)malloc(sizeof(char)*200);strcpy(m_url_real,"/log.html");strncpy(m_real_file+len,m_url_real,strlen(m_url_real));free(m_url_real);
}//圖片頁面
else if(*(p+1)=='5')
{char *m_url_real=(char *)malloc(sizeof(char)*200);strcpy(m_url_real,"/picture.html");strncpy(m_real_file+len,m_url_real,strlen(m_url_real));free(m_url_real);
}//視頻頁面
else if(*(p+1)=='6')
{char *m_url_real=(char *)malloc(sizeof(char)*200);strcpy(m_url_real,"/video.html");strncpy(m_real_file+len,m_url_real,strlen(m_url_real));free(m_url_real);
}//關注頁面
else if(*(p+1)=='7')
{char *m_url_real=(char *)malloc(sizeof(char)*200);strcpy(m_url_real,"/fans.html");strncpy(m_real_file+len,m_url_real,strlen(m_url_real));free(m_url_real);
}//否則發送url實際請求的文件
else strncpy(m_real_file+len,m_url,FILENAME_LEN-len-1);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38783.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

六、Linux系統下,文件操作命令都有哪些?

總括&#xff1a; 創建文件/文件夾&#xff1a;touch&#xff1b; 查看&#xff1a;cat/more&#xff1b; 復制&#xff1a;copy&#xff1b; 移動文件/文件夾&#xff1a;mv&#xff1b; 刪除&#xff1a;rm&#xff1b; 1、創建文件 &#xff08;1&#xff09;語法&#x…

docker私有倉庫

# 有個遠程倉庫 &#xff0c;docker官方提供的 ---》我們可以把我們的鏡像傳上去 # 公司做的鏡像&#xff0c;一般不放在遠程倉庫&#xff0c;公司會自己搭建私有倉庫&#xff08;把公司制作的鏡像傳到私有倉庫&#xff09; 1.鏡像傳到官方倉庫 # 第0步&#xff1a;在遠端創建…

阿里云與中國中醫科學院合作,推動中醫藥行業數字化和智能化發展

據相關媒體消息&#xff0c;阿里云與中國中醫科學院的合作旨在推動中醫藥行業的數字化和智能化發展。隨著互聯網的進步和相關政策的支持&#xff0c;中醫藥產業受到了國家的高度關注。這次合作將以“互聯網 中醫藥”為載體&#xff0c;致力于推進中醫藥文化的傳承和創新發展。…

AIGC繪畫:基于Stable Diffusion進行AI繪圖

文章目錄 AIGC深度學習模型繪畫系統stable diffusion簡介stable diffusion應用現狀在線網站云端部署本地部署Stable Diffusion AIGC深度學習模型繪畫系統 stable diffusion簡介 Stable Diffusion是2022年發布的深度學習文本到圖像生成模型&#xff0c;它主要用于根據文本的描述…

UG NX二次開發(C++)-UI Styler中選擇組件或者實體后設置為工作組件

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 1、前言2、在NX2007中創建一個裝配體實例2.1 裝配體模型2.2 欲實現的功能3、創建對話框文件4、在VS2022中創建一個工程項目4.1 創建項目4.1 在hpp中添加頭文件4.2 在cpp中添加代碼4.3 生成dll5、測…

通俗講解-動量梯度下降法原理與代碼實例

本站原創文章&#xff0c;轉載請說明來自《老餅講解-BP神經網絡》bp.bbbdata.com 目錄 一.動量梯度下降法介紹 1.1 動量梯度下降法簡介與思想 1.2 動量梯度下降法的算法流程 二.動量梯度下降法代碼實例 2.1 動量梯度下降法實例代碼 一.動量梯度下降法介紹…

2023年上半年數學建模競賽題目匯總與難度分析

2023年上半年數學建模競賽題目匯總與難度分析 ?由于近年來國賽ABC題出題方式漂浮不定&#xff0c;沒有太大的定性&#xff0c;目前總體的命題方向為&#xff0c;由之前的單一模型問題變為數據分析評價優化或者預測類題目是B、C題的主要命題方向。為了更好地把握今年命題的主方…

vue3-vuex

一、概念 &#xff08;1&#xff09;Vuex 是一個狀態和數據管理的框架&#xff0c;負責管理項目中多個組件和多個頁面共享的數據。 &#xff08;2&#xff09;在開發項目的時候&#xff0c;我們就會把數據分成兩個部分&#xff0c;一種數據是在某個組件內部使用&#xff0c;我…

【C++】STL案例1-評委打分

0.前言 1.系統自動生成的評委評分代碼&#xff1a; #include <iostream> using namespace std; #include <deque> #include <vector> #include <algorithm> #include <string>//選手類 class Player { public:Player(string name, float score)…

機器學習深度學習——機器翻譯(序列生成策略)

&#x1f468;?&#x1f393;作者簡介&#xff1a;一位即將上大四&#xff0c;正專攻機器學習的保研er &#x1f30c;上期文章&#xff1a;機器學習&&深度學習——seq2seq實現機器翻譯&#xff08;詳細實現與原理推導&#xff09; &#x1f4da;訂閱專欄&#xff1a;機…

ClickHouse常見的DDL語句

1.創建庫 CREATE DATABASE IF NOT EXISTS mytestdb; 2.創建表 CREATE TABLE user_info ( user_id UInt32 comment 用戶標識, name String comment 用戶名, create_date DateTime DEFAULT now() comment 創建時間, sex Enum8(男 1, 女 2) comment 性別, …

最新AI系統ChatGPT網站程序源碼+搭建教程/公眾號/H5端/安裝配置教程/完整知識庫

1、前言 SparkAi系統是基于國外很火的ChatGPT進行開發的Ai智能問答系統。本期針對源碼系統整體測試下來非常完美&#xff0c;可以說SparkAi是目前國內一款的ChatGPT對接OpenAI軟件系統。 那么如何搭建部署AI創作ChatGPT&#xff1f;小編這里寫一個詳細圖文教程吧&#xff01;…

基于IDE Eval Resetter延長IntelliJ IDEA等軟件試用期的方法(包含新版本軟件的操作方法)

本文介紹基于IDE Eval Resetter插件&#xff0c;對集成開發環境IntelliJ IDEA等JetBrains公司下屬的多個開發軟件&#xff0c;加以試用期延長的方法。 我們這里就以IntelliJ IDEA為例&#xff0c;來介紹這一插件發揮作用的具體方式。不過&#xff0c;需要說明使用IDE Eval Rese…

docker常用指令

一、Docker指令 1、啟動Docker &#xff1a;systemctl start docker 2、查看Docker狀態:systemctl status docker 狀態為active表示正在運行中 3、停止運行Docker:systemctl stop docker 4、重啟Docker:systemctl restart docker 5、開機啟動Docker:systemctl enable docker 二…

Apache Hudi Timeline Server介紹

文章目錄 Apache Hudi Timeline Server介紹1. 概述2 提供的服務3. 結論 Apache Hudi Timeline Server介紹 1. 概述 Hudi 有一個中央時間線服務器&#xff0c;在驅動程序節點中運行并作為 Rest 服務。它有多種好處&#xff0c;第一個用例是提供 FileSystemView api。Hudi 的核…

Hlang社區-社區主頁實現

文章目錄 前言首頁結構固定導航欄左側導航itemitem標志頭部推薦文章展示ITEM實現ToolTip完整實現首頁完整實現前言 廢話不多說,直接看到效果,這里的話是我們社區主頁,不是產品宣傳主頁哈: 是的也許你已經發現了這個頁面和某個網站長得賊像。沒錯是這樣的,這個布局我確實…

vue3+vite+pinia

目錄 一、項目準備 1.1、Vite搭建項目 1.2、vue_cli創建項目 二、組合式API(基于setup) 2.1、ref 2.2、reactive 2.3、toRefs 2.4、watch和watchEffect 2.5、computed 2.6、生命周期鉤子函數 2.7、setup(子組件)的第一個參數-props 2.8、setup(子組件)的第二個參數…

STM32 CubeMX (Freertos任務:創建、刪除、掛起、恢復)

STM32 CubeMX Freertos STM32 CubeMX &#xff08;Freertos任務&#xff1a;創建、刪除、掛起、恢復&#xff09; STM32 CubeMX Freertos前言一、STM32 CubeMX 配置時鐘樹配置使能串口&#xff0c;用于用于檢查實驗現象使用STM32 CubeMX 庫&#xff0c;配置Freertos創建任務 二…

云計算:新一代的技術革命

云計算&#xff0c;作為21世紀的一項重要技術革命&#xff0c;已在全球范圍內引發了深遠的影響。它改變了我們存儲和處理數據的方式&#xff0c;使得企業無需再建設和維護昂貴的本地服務器和數據中心。本文將深入探討云計算的基本概念&#xff0c;類型&#xff0c;主要優點&…

開發利器:接口代理和接口模擬工具

前端開發過程往往需要和后端對接接口,而且一般開發都是前后端同步開發,這就難免出現接口提供滯后的問題,從而導致我們前端開發 UI 開發完成而無法調試的問題。面對這種問題,一般我們會有很多種方式處理,比如在代碼中寫一些模擬數據,或者打斷點調試,或者用代理工具 Fidde…