HP-Socket v4.2.x版本开始,为HTTP客户端组件(HttpClient、HttpAgent)提供进程级别的Cookie管理器,管理器实现了标准HTTP Cookie功能,支持Max-Age、expires、httpOnly、secure等。

如图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整数
~~~
