ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
HP-Socket v4.2.x版本开始,为HTTP客户端组件(HttpClient、HttpAgent)提供进程级别的Cookie管理器,管理器实现了标准HTTP Cookie功能,支持Max-Age、expires、httpOnly、secure等。 ![](https://box.kancloud.cn/c110e4ce887df6a8d64692d7727f80fc_785x872.png) 如图4.3-1所示,管理器在内存中维护所有HTTP客户端组件产生的Cookie,可在不同连接、不同组件对象间共享Cookie,并支持Cookie序列化与反序列化。 客户端组件默认设置为使用Cookie,只要客户端组件设置为使用Cookie,它接收到的Cookie会自动存入管理器;当发送HTTP请求时会自动从管理器中加载Cookie。 如果组件设置为不使用Cookie(设置方法:SetUseCookie(FALSE)),它接收到的Cookie不会被解析,不会存入管理器;发送HTTP请求时也不会从管理器中加载Cookie。 * * * * * > 注意:管理器内部使用读写锁控制Cookie存取,高并发下会带来一些性能损失。如果确定组件不会用到Cookie,可设置为不使用Cookie。 > * * * * * HP-Socket提供一些管理函数操作管理器,也提供Cookie辅助函数便于应用程序处理Cookie: **从文件加载Cookie:** ~~~ BOOL HP_HttpCookie_MGR_LoadFromFile(lpszFile, bKeepExists) lpszFile -- 文件 bKeepExists -- 是否保留管理器中原有的Cookie ~~~ **保存Cookie到文件:** ~~~ BOOL HP_HttpCookie_MGR_SaveToFile(lpszFile, bKeepExists) lpszFile -- 文件 bKeepExists -- 是否保留文件中原有的Cookie ~~~ **清理Cookie:** ~~~ BOOL HP_HttpCookie_MGR_ClearCookies(lpszDomain, lpszPath) lpszDomain -- 域,为空则表示所有域 lpszPath -- 路径,为空则表示所有路径 ~~~ **清理过期Cookie:** ~~~ BOOL HP_HttpCookie_MGR_RemoveExpiredCookies(lpszDomain, lpszPath) lpszDomain -- 域,为空则表示所有域 lpszPath -- 路径,为空则表示所有路径 ~~~ **设置Cookie:** ~~~ BOOL HP_HttpCookie_MGR_SetCookie(lpszName, lpszValue, lpszDomain, lpszPath, iMaxAge, bHttpOnly, bSecure, enSameSite, bOnlyUpdateValueIfExists) lpszName -- 名称 lpszValue -- 值 lpszDomain -- 域 lpszPath -- 路径 iMaxAge -- 生命周期:> 0 –> 存活秒数;= 0 –> 立刻删除,< 0 –> 到应用程序结束 bHttpOnly -- 是否有HttpOnly属性 bSecure -- 是否有secure属性 enSameSite -- SameSite属性:0 –> 无;1 –> Strict;2 –> LAX bOnleUpdateValueIfExists -- 如果Cookie已存在是否只更新Cookie值 ~~~ **删除Cookie:** ~~~ BOOL HP_HttpCookie_MGR_DeleteCookie(lpszDomain, lpszPath, lpszName) lpszDomain -- 域 lpszPath -- 路径 lpszName -- 名称 ~~~ **设置是否允许第三方Cookie:** ~~~ void HP_HttpCookie_MGR_SetEnableThirdPartyCookie(bEnableThirdPartyCookie) bEnableThirdPartyCookie -- TRUE –> 允许;FALSE –> 禁止 ~~~ **检查是否允许第三方Cookie:** `BOOL HP_HttpCookie_MGR_IsEnableThirdPartyCookie()` **Cookie expires字符串转换为整数:** ~~~ BOOL HP_HttpCookie_HLP_ParseExpires(lpszExpires, ptmExpires) lpszExpires -- expires字符串 ptmExpires -- expires整数指针 ~~~ **整数转换为Cookie expires字符串:** ~~~ BOOL HP_HttpCookie_HLP_MakeExpiresStr(lpszBuff, piBuffLen, tmExpires) lpszBuff -- 字符串缓冲区 piBuffLen -- 缓冲区长度 tmExpires -- expires整数 ~~~ **生成Cookie字符串:** ~~~ BOOL HP_HttpCookie_HLP_ToString(lpszBuff, piBuffLen, lpszName, lpszValue, lpszDomain, lpszPath, iMaxAge, bHttpOnly, bSecure, enSameSite) lpszBuff -- 字符串缓冲区 piBuffLen -- 缓冲区长度 lpszName -- 名称 lpszValue -- 值 lpszDomain -- 域 lpszPath -- 路径 iMaxAge -- 生命周期:> 0 –> 存活秒数;= 0 –> 立刻删除,< 0 –> 到应用程序结束 bHttpOnly -- 是否有HttpOnly属性 bSecure -- 是否有secure属性 enSameSite -- SameSite属性:0 –> 无;1 –> Strict;2 –> LAX ~~~ **获取当前UTC时间:** `__time64_t HP_HttpCookie_HLP_CurrentUTCTime()` **Max-Age -> expires:** ~~~ __time64_t HP_HttpCookie_HLP_MaxAgeToExpires(iMaxAge) iMaxAge -- 生命周期:> 0 –> 存活秒数;= 0 –> 立刻删除,< 0 –> 到应用程序结束 ~~~ **expires -> Max-Age:** ~~~ int HP_HttpCookie_HLP_ExpiresToMaxAge(tmExpires) tmExpires -- expires整数 ~~~