怎么在C++服务端中使用Seesion

今天就跟大家聊聊有关怎么在C++服务端中使用Seesion,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

首先,我们看一个需求:

客户第一次设置登陆后,以后再次登陆的时候,想要使用快捷登陆或者是一键登陆,比如我们使用指纹登陆,即可获取我们的账户信息

根据这个需求我们做一个方案进行解决,底层实现我们可以使用session的思想;

怎么在C++服务端中使用Seesion

方案:

怎么在C++服务端中使用Seesion 怎么在C++服务端中使用Seesion

怎么在C++服务端中使用Seesion

说明 :

  • 用户快捷登陆时,根据快捷登陆的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有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。

发布于 2021-03-21 22:40:00
收藏
分享
海报
0 条评论
165
上一篇:怎么在Node中使用Nodemailer发送邮件 下一篇:如何在Python中使用unittest
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码