怎么在C++服务端中使用Seesion
今天就跟大家聊聊有关怎么在C++服务端中使用Seesion,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
首先,我们看一个需求:
客户第一次设置登陆后,以后再次登陆的时候,想要使用快捷登陆或者是一键登陆,比如我们使用指纹登陆,即可获取我们的账户信息
根据这个需求我们做一个方案进行解决,底层实现我们可以使用session的思想;
方案:
说明 :
用户快捷登陆时,根据快捷登陆的ID码在redis中查找
如果再redis中不存在,则创建session,与用户的id绑定;如果存在,则登陆成功,调用相关功能显示用户信息
session的产生一般每个公司都会有自己改造的一套方案,这样可以提升安全性,这里就使用原生的MD5接口
关于redis键值对的设计,一般都比较简单,建议大家可以自己设计一套,并且实现这个功能;
这里,简单展示一下 sessionid 的生成:
#pragmaonce #include<iostream> #include<openssl/md5.h> #include<string.h> usingnamespacestd; classMd5 { public: Md5(); ~Md5(); boolSetMd5(stringdata); unsignedchar*GetMd5(); private: MD5_CTXctx; unsignedcharoutMd5[16]; }; #include"Md5.h" Md5::Md5() { } Md5::~Md5() { } unsignedchar*Md5::GetMd5() { //数组初始化 memset(outMd5,0x00,sizeof(outMd5)); intres=MD5_Final(outMd5,&ctx); if(res!=1) { cout<<"Md5_Finaliserrpr"<<endl; } returnoutMd5; } boolMd5::SetMd5(stringdata) { //初始化Md5 MD5_Init(&ctx); //计算Md5 intres=MD5_Update(&ctx,data.c_str(),5); if(res!=1) { cout<<"Md5_Updateiserrpr"<<endl; returnfalse; } returntrue; } #pragmaonce #include<iostream> #include<stdlib.h> #include<stdio.h> #include"string.h" #include"Md5.h"
using namespace std;
classSession { public: Session(); ~Session(); Session(stringUserName,intID); boolSetId(); intGetId(); boolSetUserName(); stringGetUserName(); boolSetSessionId(); boolSetSessionData(); stringGetSessionData(); unsignedchar*GetSessionId(); private: stringname; intid; stringSessionData; Md5md5; }; #include"session.h" Session::Session() { } Session::~Session() { } Session::Session(stringUserName,intID) { this->id=ID; this->name=UserName; } intSession::GetId() { returnthis->id; } stringSession::GetUserName() { returnthis->name; } boolSession::SetSessionData() { charstr[20]; memset(str,0,sizeof(str)); //这里使用name+id的方式,生成最终的sessionid sprintf(str,"%d",GetId()); SessionData=GetUserName()+str; returntrue; } stringSession::GetSessionData() { if(!SessionData.empty()) returnSessionData; } unsignedchar*Session::GetSessionId() { returnmd5.GetMd5(); } boolSession::SetSessionId() { boolres=md5.SetMd5(GetSessionData()); if(!res) returnfalse; returntrue; } #include"session.h" intmain() { unsignedchar*str=newunsignedchar[16]; Sessionsession("test",10); session.SetSessionData(); session.SetSessionId(); str=session.GetSessionId(); for(inti=0;i<16;i++) { printf("%02X",str[i]); } printf("\n"); return0; } CXX=g++-std=c++11 CFLAG=-g-lssl-lcrypto target=test OBJ=Md5.cppmain.cppsession.cpp $(target):$(OBJ) $(CXX)-o$@$^$(CFLAG) clean: rm-f$(target)
补充知识点:
session原理:
用户使用浏览器第一次向服务器发送请求,服务器在接受到请求后,调用对应的 Servlet 进行处理。在处理过程中会给用户创建一个session 对象,用来存储用户请求处理相关的公共数据,并将此 session 对象的 JSESSIONID 以 Cookie 的形式存储在浏览器中 (临时存储,浏览器关闭即失效)。用户在发起第二次请求及后续请求时,请求信息中会附带JSESSIONID,服务器在接收到请求后, 调用对应的Servlet 进行请求处理,同时根据 JSESSIONID 返回其对应的session 对象。
特点:
由服务器进行创建
每个用户独立拥有一个session
默认存储时间为 30 分钟作用:
解决了一个用户的不同请求的数据共享问题。
使用:
创建Session 对象
存储数据到session 对象获取session 对象
获取数据从session 对象
如果获取session 中不存在的数据返回null。
看完上述内容,你们对怎么在C++服务端中使用Seesion有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。
推荐阅读
-
PHP错误WARNING: SESSION_START()
-
php与session会话劫持与会话固定,看完你就知道如何预防了
-
了解的Session的本质
-
PHP-Session利用总结
-
备战金九银十,2020最新大厂PHP面试题(附答案)
-
上网如何保存记录?你要知道Session和Cookie的关系
-
实战经验:修改PHP session存放位置
-
网络安全之php站点被攻击的方式
这里列出16种php站点被攻击的方式1、命令注入(CommandInjection)2、eval注入(EvalInje...
-
如何运用PHP+REDIS解决负载均衡后的session共享问题
-
PHP经典高级工程师面试题
1.PHP如何实现不用自带的cookie函数为客户端下发cookie。对于分布式系统,如何来保存session值...