今天就跟大家聊聊有關(guān)怎么在C++服務(wù)端中使用Seesion,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)自2013年起,先為桃城等服務(wù)建站,桃城等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為桃城企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。首先,我們看一個需求:
客戶第一次設(shè)置登陸后,以后再次登陸的時候,想要使用快捷登陸或者是一鍵登陸,比如我們使用指紋登陸,即可獲取我們的賬戶信息
根據(jù)這個需求我們做一個方案進行解決,底層實現(xiàn)我們可以使用session的思想;
方案:
說明 :
用戶快捷登陸時,根據(jù)快捷登陸的ID碼在redis中查找
如果再redis中不存在,則創(chuàng)建session,與用戶的id綁定;如果存在,則登陸成功,調(diào)用相關(guān)功能顯示用戶信息
session的產(chǎn)生一般每個公司都會有自己改造的一套方案,這樣可以提升安全性,這里就使用原生的MD5接口
關(guān)于redis鍵值對的設(shè)計,一般都比較簡單,建議大家可以自己設(shè)計一套,并且實現(xiàn)這個功能;
這里,簡單展示一下 sessionid 的生成:
#pragma once #include#include #include using namespace std; class Md5 { public: Md5(); ~Md5(); bool SetMd5(string data); unsigned char* GetMd5(); private: MD5_CTX ctx; unsigned char outMd5[16]; }; #include "Md5.h" Md5::Md5() { } Md5::~Md5() { } unsigned char* Md5::GetMd5() { //數(shù)組初始化 memset(outMd5,0x00,sizeof(outMd5)); int res = MD5_Final(outMd5,&ctx); if(res != 1) { cout<<"Md5_Final is errpr"< #include #include #include "string.h" #include "Md5.h"
using namespace std;
class Session { public: Session(); ~Session(); Session(string UserName,int ID); bool SetId(); int GetId(); bool SetUserName(); string GetUserName(); bool SetSessionId(); bool SetSessionData(); string GetSessionData(); unsigned char* GetSessionId(); private: string name; int id; string SessionData; Md5 md5; }; #include "session.h" Session::Session() { } Session::~Session() { } Session::Session(string UserName,int ID) { this->id = ID; this->name = UserName; } int Session::GetId() { return this->id; } string Session::GetUserName() { return this->name; } bool Session::SetSessionData() { char str[20]; memset(str,0,sizeof(str)); //這里使用name+id的方式,生成最終的sessionid sprintf(str,"%d",GetId()); SessionData = GetUserName()+str; return true; } string Session::GetSessionData() { if(!SessionData.empty()) return SessionData; } unsigned char* Session::GetSessionId() { return md5.GetMd5(); } bool Session::SetSessionId() { bool res = md5.SetMd5(GetSessionData()); if(!res) return false; return true; } #include "session.h" int main() { unsigned char* str = new unsigned char[16]; Session session("test",10); session.SetSessionData(); session.SetSessionId(); str = session.GetSessionId(); for(int i=0;i<16;i++) { printf("%02X",str[i]); } printf("\n"); return 0; } CXX = g++ -std=c++11 CFLAG = -g -lssl -lcrypto target = test OBJ = Md5.cpp main.cpp session.cpp $(target):$(OBJ) $(CXX) -o $@ $^ $(CFLAG) clean: rm -f $(target)
補充知識點:
session原理:
用戶使用瀏覽器第一次向服務(wù)器發(fā)送請求,服務(wù)器在接受到請求后,調(diào)用對應(yīng)的 Servlet 進行處理。在處理過程中會給用戶創(chuàng)建一個session 對象,用來存儲用戶請求處理相關(guān)的公共數(shù)據(jù),并將此 session 對象的 JSESSIONID 以 Cookie 的形式存儲在瀏覽器中 (臨時存儲,瀏覽器關(guān)閉即失效)。用戶在發(fā)起第二次請求及后續(xù)請求時,請求信息中會附帶JSESSIONID,服務(wù)器在接收到請求后, 調(diào)用對應(yīng)的Servlet 進行請求處理,同時根據(jù) JSESSIONID 返回其對應(yīng)的session 對象。
特點:
由服務(wù)器進行創(chuàng)建
每個用戶獨立擁有一個session
默認存儲時間為 30 分鐘作用:
解決了一個用戶的不同請求的數(shù)據(jù)共享問題。
使用:
創(chuàng)建Session 對象
存儲數(shù)據(jù)到session 對象獲取session 對象
獲取數(shù)據(jù)從session 對象
如果獲取session 中不存在的數(shù)據(jù)返回null。
看完上述內(nèi)容,你們對怎么在C++服務(wù)端中使用Seesion有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。