解决nginx如何存储HTTP客户端信息的问题
来源:互联网 发布:javascript 模块化 编辑:程序博客网 时间:2024/06/03 17:17
解决nginx如何存储HTTP客户端信息的问题
背景
在web应用软件开发的过程中,服务器端需要存储Session信息来保存HTTP客户端的连接信息。客户端信息包括用户名、用户二维码、二维码时间戳等等。
解决方法
定义一个User结构体存储用户信息。定义一个类,在该类中定义一个static map<string ,User>变量。其中string代表客户端的cookie key ,User代表cookie key对应的用户信息。
示例代码
SessionMap.h
#ifndef _MAP_#define _MAP_#include <map>#include <iostream>#include <string>#include <string.h>using namespace std;//用户信息typedef struct userInfo{ userInfo(){ userName=""; userTimeStamp=0; qrCode =""; qrTimeStamp =0; phoneNum=""; passCode=""; codeTimeStamp=0;certRandomStr=""; certTimeStamp=0; } string userName; int userTimeStamp;string certRandomStr; int certTimeStamp; string qrCode; int qrTimeStamp; string phoneNum; string passCode; int codeTimeStamp;}User;//全局对象类class Session {public:typedef std::map<std::string, User> OpMap;static void setpair(const string& key,const User& value){opMap.insert(make_pair(key.c_str(),value));}static int getCount(){return opMap.size();}static User getpairValue(const string& key){ map<string,User>::iterator map_it = opMap.find(key.c_str()); if(map_it != opMap.end()){ return map_it->second; }else{return User();}}static void updateValue(const string& key,const User& value ){ map<string,User>::iterator map_it = opMap.find(key.c_str()); if(map_it != opMap.end()){ map_it->second = value; }}static void deleteUser(const string& key){map<string,User>::iterator iter=opMap.find(key.c_str());if(iter != opMap.end()){opMap.erase(iter);}}static void printMap(){for (std::map<string,User>::iterator it=Session::opMap.begin(); it!=Session::opMap.end(); ++it) { std::cout << it->first <<":"<< it->second.userName << '\n'; }}static void getJsonFormatUser( string &userinfo){Session::deleteUser(""); userinfo="{\"userInfo\": \[";; for (std::map<string,User>::iterator it=Session::opMap.begin(); it!=Session::opMap.end(); ++it) { userinfo += "{ \"username\":\""; userinfo += it->second.userName; userinfo += "\" },"; } userinfo.replace(userinfo.length()-1,1,""); userinfo +="] }";}static void deleteUserByName(const string& name){ for (std::map<string,User>::iterator it=Session::opMap.begin(); it!=Session::opMap.end(); ++it) {if( strcmp(it->second.userName.c_str(),name.c_str())==0 ){opMap.erase(it);}}}static string geUserByQrCode(const string& value){ for(map<string,User>::iterator it=Session::opMap.begin(); it!=Session::opMap.end(); ++it) { string s1 = (it->second.qrCode); if( strcmp(s1.c_str(),value.c_str()) ==0 ){ return it->first; } } }public: private: static OpMap opMap; //初始化函数 static OpMap init_map() { OpMap mapinit; mapinit[""] = User(); return mapinit; }};#endif
SessionMap.cpp
#include "SessionMap.h"Session::OpMap Session::opMap = Session::init_map();
用于测试的testMap.cpp
#include "SessionMap.h"int main(){ User u1; u1.userName="22222"; Session::setpair("111",u1); User u2; u2.userName="daafa22222"; Session::updateValue("111",u2); User user = Session::getpairValue("111"); cout<<user.userName<<endl; User u1; u1.phoneNum = "111111"; return 0;}
编译
g++ -c SessionMap.cpp testMap.cpp
g++ -o test SessionMap.o testMap.o
运行test可执行文件就可以了。
总结
可以使用类的static成员可以做为全局变量的优点来实现存储系统信息。
0 0
- 解决nginx如何存储HTTP客户端信息的问题
- 解决Nginx+Tomcat下客户端https请求跳转成http的问题
- 如何解决Nginx的session一致性问题
- [转]客户端HTTP请求的Header信息
- 如何解决Remoting无法传输存储过程参数的问题
- 如何解决Remoting无法传输存储过程参数的问题
- Nginx如何解决事件过期问题
- [问题]VB通信中怎么解决1(服务器)对多(客户端)的发信息?
- 解决无法使用http访问安装好nginx和ftp的图片服务器的问题
- java http 客户端使用TSLv1.2[解决Remote host closed connection during handshake的问题]
- nginx如何响应客户端
- 信息入口的新闻客户端如何盈利?
- 终于解决图片的exif信息在liunx下存储后乱码的问题
- 解决Nginx+Tomcat中https转http请求问题
- nginx图片服务器优化 解决流量和存储问题
- nginx-如何将自己的HTTP模块编译进nginx
- Nginx源码剖析--HTTP模块配置信息的merge
- 如何解决拷贝的工作空间在BIM启动客户端提示没有license的问题?
- MYSQL 查看数据库大小以及表的大小
- no typehandler found for property XXXX 解决
- 多次使用axis2调用webservice后,报连接超时错误
- 工作笔记
- 一句话理解Vue核心内容
- 解决nginx如何存储HTTP客户端信息的问题
- java 哈希表
- 1028: 求函数值
- java常量池细节
- Longest Palindromic Subsequence
- Webpack学习心得
- bash之字符串处理
- C++编码规则----布局
- cc1plus: all warnings being treated as errors