Seesion在C++服务端的使用方法

 更新时间:2020年02月24日 08:44:14   作者:CPP后台服务器开发  
这篇文章主要介绍了Seesion在C++服务端是怎么使用的?本文给出了解决方案和实例代码供大家参考,需要的朋友可以参考下

前面介绍了cookie和session两种机制的产生和使用过程(可以关注 CPP后台服务器 公众号查看),但是,似乎在我们C++后台开发过程中遇见的很少;

那session在我们服务端是怎么使用的呢?

首先,我们看一个需求:

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

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

方案:

说明 :

  • 用户快捷登陆时,根据快捷登陆的ID码在redis中查找
  • 如果再redis中不存在,则创建session,与用户的id绑定;如果存在,则登陆成功,调用相关功能显示用户信息
  • session的产生一般每个公司都会有自己改造的一套方案,这样可以提升安全性,这里就使用原生的MD5接口

关于redis键值对的设计,一般都比较简单,建议大家可以自己设计一套,并且实现这个功能;

这里,简单展示一下 sessionid 的生成:

#pragma once
#include <iostream>
#include <openssl/md5.h>
#include <string.h>
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()
{
 //数组初始化
 memset(outMd5,0x00,sizeof(outMd5));
 int res = MD5_Final(outMd5,&ctx);
 if(res != 1)
 {
 cout<<"Md5_Final is errpr"<<endl;
 }
 return outMd5;
}
bool Md5::SetMd5(string data)
{
 //初始化Md5
 MD5_Init(&ctx);
 //计算Md5
 int res = MD5_Update(&ctx,data.c_str(),5);
 if(res != 1)
 {
 cout<<"Md5_Update is errpr"<<endl;
 return false;
 }
 return true;
}
#pragma once
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#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原理:

用户使用浏览器第一次向服务器发送请求,服务器在接受到请求后,调用对应的 Servlet 进行处理。在处理过程中会给用户创建一个session 对象,用来存储用户请求处理相关的公共数据,并将此 session 对象的 JSESSIONID 以 Cookie 的形式存储在浏览器中 (临时存储,浏览器关闭即失效)。用户在发起第二次请求及后续请求时,请求信息中会附带JSESSIONID,服务器在接收到请求后, 调用对应的Servlet 进行请求处理,同时根据 JSESSIONID 返回其对应的session 对象。

特点:

由服务器进行创建

每个用户独立拥有一个session

默认存储时间为 30 分钟作用:

解决了一个用户的不同请求的数据共享问题。

使用:

创建Session 对象

存储数据到session 对象获取session 对象

获取数据从session 对象

如果获取session 中不存在的数据返回null。

总结

到此这篇关于Seesion在C++服务端的使用方法的文章就介绍到这了,更多相关session C++服务端内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c语言二进制数按位输出示例

    c语言二进制数按位输出示例

    这篇文章主要介绍了c语言二进制数按位输出示例,需要的朋友可以参考下
    2014-03-03
  • C++利用PCL点云库操作txt文件详解

    C++利用PCL点云库操作txt文件详解

    这篇文章主要为大家详细介绍了C++如何利用PCL点云库操作txt文件,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2024-01-01
  • 详解C语言中free()函数与getpagesize()函数的使用

    详解C语言中free()函数与getpagesize()函数的使用

    这篇文章主要介绍了详解C语言中free()函数与getpagesize()函数的使用,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C++实现骑士走棋盘算法

    C++实现骑士走棋盘算法

    这篇文章主要为大家详细介绍了C++实现骑士走棋盘算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Qt无边框窗口拖拽和阴影的实现

    Qt无边框窗口拖拽和阴影的实现

    自定义窗口控件的无边框,窗口事件由于没有系统自带边框,无法实现拖拽拉伸等事件的处理,本文主要介绍了Qt无边框窗口拖拽和阴影的实现,感兴趣的可以了解一下
    2024-01-01
  • 使用Matlab制作简易版八分音符酱游戏

    使用Matlab制作简易版八分音符酱游戏

    八分音符酱作为一款声音控制类游戏,当时还是很受大家的喜爱的。本文将用Matlab制作一款简易版的八分音符酱游戏,感兴趣的可以学习一下
    2022-02-02
  • Unreal学习之简单三角形的绘制详解

    Unreal学习之简单三角形的绘制详解

    之所以写这个绘制简单三角形的实例其实是想知道如何在Unreal中通过代码绘制自定义Mesh,如果你会绘制一个三角形,那么自然就会绘制复杂的Mesh了。所以这是很多图形工作者的第一课,快跟随小编一起学习起来吧
    2023-02-02
  • 完全掌握C++编程中构造函数使用的超级学习教程

    完全掌握C++编程中构造函数使用的超级学习教程

    这篇文章主要介绍了C++中的构造函数,包括C++11标准中的新特性的介绍,十分推荐!需要的朋友可以参考下
    2016-01-01
  • c语言经典习题之逆序字符串详解

    c语言经典习题之逆序字符串详解

    这篇文章主要为大家介绍了c语言习题之逆序字符串,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • QT实现FTP上传文件

    QT实现FTP上传文件

    这篇文章主要为大家详细介绍了QT实现FTP上传文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论