查看源码 ssl_session_cache_api 行为 (ssl v11.2.6)

TLS 会话缓存 API

定义了 TLS 会话缓存(TLS-1.3 之前)的 API,以便可以通过定义一个新的实现此 API 的回调模块来替换数据存储方案。

概要

类型

键的不透明部分。不需要由回调处理。

为每个会话存储的会话数据。

会话缓存中条目的键。

可用于引用缓存的项。

回调

删除缓存条目。

在缓存的连续元素上调用 Fun(Elem, AccIn),从 AccIn == Acc0 开始。

执行缓存的可能初始化,并返回对它的引用,该引用用作其他 API 函数的参数。

查找缓存条目。可从任何进程调用。

选择可以重用的会话,即在其键中包含 PartialKey 的会话。可从任何进程调用。

返回缓存中的会话数。

处理缓存处理进程终止时可能需要的清理工作。

缓存新会话或更新已缓存的会话。

类型

链接到此不透明类型

partial_key()

查看源码 (自 OTP R14B 起)
-opaque partial_key()

键的不透明部分。不需要由回调处理。

链接到此不透明类型

session()

查看源码 (自 OTP R14B 起)
-opaque session()

为每个会话存储的会话数据。

链接到此类型

session_cache_key()

查看源码 (自 OTP R14B 起)
-type session_cache_key() :: {partial_key(), ssl:session_id()}.

会话缓存中条目的键。

链接到此类型

session_cache_ref()

查看源码 (自 OTP R14B 起)
-type session_cache_ref() :: any().

可用于引用缓存的项。

回调

链接到此回调

delete(CacheRef, Key)

查看源码 (自 OTP R14B 起)
-callback delete(CacheRef, Key) -> DoNotCare
                    when CacheRef :: session_cache_ref(), Key :: session_cache_key(), DoNotCare :: any().

删除缓存条目。

仅从缓存处理进程调用。

链接到此回调

foldl(Fun, Acc0, CacheRef)

查看源码 (可选) (自 OTP R14B 起)
-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 起,此函数仅在客户端使用,并且不需要为服务器缓存实现。

链接到此回调

init(InitArgs)

查看源码 (自 OTP 18.0 起)
-callback init(InitArgs) -> CacheRef when InitArgs :: list(), CacheRef :: session_cache_ref().

执行缓存的可能初始化,并返回对它的引用,该引用用作其他 API 函数的参数。

由缓存处理进程的 init 函数调用,因此对其提出了与普通进程 init 函数相同的要求。当启动 SSL 应用程序时,此函数会被调用两次,一次角色为客户端,一次角色为服务器,因为 SSL 应用程序必须准备好承担这两种角色。

在初始化参数列表中包含属性 {role, client | server}。目前,这是唯一预定义的属性,还可以有用户定义的属性。另请参阅应用程序环境变量 session_cb_init_args

链接到此回调

lookup(CacheRef, Key)

查看源码 (自 OTP R14B 起)
-callback lookup(CacheRef, Key) -> Session
                    when
                        CacheRef :: session_cache_ref(),
                        Key :: session_cache_key(),
                        Session :: session() | undefined.

查找缓存条目。可从任何进程调用。

链接到此回调

select_session(CacheRef, Server)

查看源码 (可选) (自 OTP R14B 起)
-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 起,此函数仅在客户端使用,不需要为服务器缓存实现。

链接到此回调

size(CacheRef)

查看源码 (自 OTP 19.3 起)
-callback size(CacheRef) -> Size when CacheRef :: session_cache_ref(), Size :: pos_integer().

返回缓存中的会话数。

如果大小超过最大会话数,则当前缓存条目将被失效,无论其剩余生命周期如何。可从任何进程调用。

链接到此回调

terminate(CacheRef)

查看源码 (自 OTP R14B 起)
-callback terminate(CacheRef) -> DoNotCare when CacheRef :: session_cache_ref(), DoNotCare :: any().

处理缓存处理进程终止时可能需要的清理工作。

链接到此回调

update(CacheRef, Key, Session)

查看源码 (自 OTP R14B 起)
-callback update(CacheRef, Key, Session) -> DoNotCare
                    when
                        CacheRef :: session_cache_ref(),
                        Key :: session_cache_key(),
                        Session :: session() | undefined,
                        DoNotCare :: any().

缓存新会话或更新已缓存的会话。

仅从缓存处理进程调用。