查看源码 ssl_session_cache_api 行为 (ssl v11.2.6)
TLS 会话缓存 API
定义了 TLS 会话缓存(TLS-1.3 之前)的 API,以便可以通过定义一个新的实现此 API 的回调模块来替换数据存储方案。
概要
回调
删除缓存条目。
在缓存的连续元素上调用 Fun(Elem, AccIn)
,从 AccIn == Acc0
开始。
执行缓存的可能初始化,并返回对它的引用,该引用用作其他 API 函数的参数。
查找缓存条目。可从任何进程调用。
选择可以重用的会话,即在其键中包含 PartialKey
的会话。可从任何进程调用。
返回缓存中的会话数。
处理缓存处理进程终止时可能需要的清理工作。
缓存新会话或更新已缓存的会话。
类型
-opaque partial_key()
键的不透明部分。不需要由回调处理。
-opaque session()
为每个会话存储的会话数据。
-type session_cache_key() :: {partial_key(), ssl:session_id()}.
会话缓存中条目的键。
-type session_cache_ref() :: any().
可用于引用缓存的项。
回调
-callback delete(CacheRef, Key) -> DoNotCare when CacheRef :: session_cache_ref(), Key :: session_cache_key(), DoNotCare :: any().
删除缓存条目。
仅从缓存处理进程调用。
-callback foldl(Fun, Acc0, CacheRef) -> Acc when Fun :: fun(), Acc0 :: term(), CacheRef :: session_cache_ref(), Acc :: term().
在缓存的连续元素上调用 Fun(Elem, AccIn)
,从 AccIn == Acc0
开始。
Fun/2
必须返回一个新的累加器,该累加器传递给下一个调用。该函数返回累加器的最终值。如果缓存为空,则返回 Acc0
。
注意
自 OTP-23.3 起,此函数仅在客户端使用,并且不需要为服务器缓存实现。
-callback init(InitArgs) -> CacheRef when InitArgs :: list(), CacheRef :: session_cache_ref().
执行缓存的可能初始化,并返回对它的引用,该引用用作其他 API 函数的参数。
由缓存处理进程的 init
函数调用,因此对其提出了与普通进程 init
函数相同的要求。当启动 SSL 应用程序时,此函数会被调用两次,一次角色为客户端,一次角色为服务器,因为 SSL 应用程序必须准备好承担这两种角色。
在初始化参数列表中包含属性 {role, client | server}
。目前,这是唯一预定义的属性,还可以有用户定义的属性。另请参阅应用程序环境变量 session_cb_init_args。
-callback lookup(CacheRef, Key) -> Session when CacheRef :: session_cache_ref(), Key :: session_cache_key(), Session :: session() | undefined.
查找缓存条目。可从任何进程调用。
-callback select_session(CacheRef, Server) -> Sessions when CacheRef :: session_cache_ref(), Server :: {ssl:host(), inet:port_number()} | inet:port_number(), Sessions :: [session()].
选择可以重用的会话,即在其键中包含 PartialKey
的会话。可从任何进程调用。
注意
自 OTP-23.3 起,此函数仅在客户端使用,不需要为服务器缓存实现。
-callback size(CacheRef) -> Size when CacheRef :: session_cache_ref(), Size :: pos_integer().
返回缓存中的会话数。
如果大小超过最大会话数,则当前缓存条目将被失效,无论其剩余生命周期如何。可从任何进程调用。
-callback terminate(CacheRef) -> DoNotCare when CacheRef :: session_cache_ref(), DoNotCare :: any().
处理缓存处理进程终止时可能需要的清理工作。
-callback update(CacheRef, Key, Session) -> DoNotCare when CacheRef :: session_cache_ref(), Key :: session_cache_key(), Session :: session() | undefined, DoNotCare :: any().
缓存新会话或更新已缓存的会话。
仅从缓存处理进程调用。