Seesion在C++服务端的使用方法
前面介绍了cookie和session两种机制的产生和使用过程(可以关注CPP后台服务器公众号查看),但是,似乎在我们C++后台开发过程中遇见的很少;
那session在我们服务端是怎么使用的呢?
首先,我们看一个需求:
客户第一次设置登陆后,以后再次登陆的时候,想要使用快捷登陆或者是一键登陆,比如我们使用指纹登陆,即可获取我们的账户信息
根据这个需求我们做一个方案进行解决,底层实现我们可以使用session的思想;
方案:
说明:
- 用户快捷登陆时,根据快捷登陆的ID码在redis中查找
- 如果再redis中不存在,则创建session,与用户的id绑定;如果存在,则登陆成功,调用相关功能显示用户信息
- session的产生一般每个公司都会有自己改造的一套方案,这样可以提升安全性,这里就使用原生的MD5接口
关于redis键值对的设计,一般都比较简单,建议大家可以自己设计一套,并且实现这个功能;
这里,简单展示一下sessionid的生成:
#pragmaonce #include#include #include 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"< #include #include #include"string.h" #include"Md5.h"
usingnamespacestd;
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。
总结
到此这篇关于Seesion在C++服务端的使用方法的文章就介绍到这了,更多相关sessionC++服务端内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。