Kentico 使用内存中的数据来提高 Web 部件的可见性
Kentico use data in memory for Web Parts visibility
我们正在开发一个站点,我们希望在该站点上通过调用外部服务对用户进行身份验证。当用户通过身份验证时,我们将收到用户配置文件,我想使用配置文件数据来填充内容元素,如静态文本 Web 部件,或将其用于可见性条件。
问题是我不想将数据存储在 UserSettings
或自定义表中,因为请求是将配置文件数据仅保存在内存中。
由于调用是通过自定义 Web 部件完成的,因此解决方案是将从外部服务接收的配置文件存储到会话中,然后通过调用 {% Session["Name"] %}
或使用 SessionHelper
在页面中使用它。
似乎会话访问仅在 Web 部件代码中起作用,而不是在页面内容中起作用。
我也尝试使用未存储在数据库中的自定义字段,但由于某些原因,它们在 {% CurrentUser.UserSettings.ItemsAsFields.Name #%}
中也不可见。
有没有一种方法可以在不创建存储在数据库中的自定义字段的情况下在内存中存储和访问数据?
还有没有一种方法可以在 Kentico 中对用户进行身份验证,而无需在数据库中提供实际用户信息?
根据您的环境,您可能需要 use SQL Server Session 与 InProc 才能正常工作。更具体地说,如果您的环境包括网络场,建议将会话保留在数据库中。在以前的实现中,我使用 Session 毫无问题地按照您的描述进行操作。
我遇到的主要障碍是随着网站流量的增加,用户数据占用了大量内存。我们最终做的是将自定义用户信息存储在自定义 table 中作为 XML 数据,然后根据需要在站点内访问它。
我为确保清理会话所做的一件事是创建一个 custom scheduled task to check the date the data was created and if it was older than XX hours or days, we removed it. OR if a user clicked the log out button, the record was removed in a custom global event。
一个简单的解决方案是仍然使用 Session,只是创建一个自定义宏方法来获取 Session 值。
https://docs.kentico.com/display/K9/Registering+custom+macro+methods
请注意,如果会话是 InProc,在会话中存储每个用户的数据会大大增加内存,如果您的 IIS 服务器开始占用大量内存,您可能需要切换到基于 SQL 的会话。
下一个关于在没有用户信息的情况下对用户进行身份验证的问题,您至少需要创建一个基本用户帐户(将 IsExternal 设置为 true),您不需要做更多的事情,但 Kentico 确实需要CMS_User 中的 User 以便执行很多操作。
我们正在开发一个站点,我们希望在该站点上通过调用外部服务对用户进行身份验证。当用户通过身份验证时,我们将收到用户配置文件,我想使用配置文件数据来填充内容元素,如静态文本 Web 部件,或将其用于可见性条件。
问题是我不想将数据存储在 UserSettings
或自定义表中,因为请求是将配置文件数据仅保存在内存中。
由于调用是通过自定义 Web 部件完成的,因此解决方案是将从外部服务接收的配置文件存储到会话中,然后通过调用 {% Session["Name"] %}
或使用 SessionHelper
在页面中使用它。
似乎会话访问仅在 Web 部件代码中起作用,而不是在页面内容中起作用。
我也尝试使用未存储在数据库中的自定义字段,但由于某些原因,它们在 {% CurrentUser.UserSettings.ItemsAsFields.Name #%}
中也不可见。
有没有一种方法可以在不创建存储在数据库中的自定义字段的情况下在内存中存储和访问数据?
还有没有一种方法可以在 Kentico 中对用户进行身份验证,而无需在数据库中提供实际用户信息?
根据您的环境,您可能需要 use SQL Server Session 与 InProc 才能正常工作。更具体地说,如果您的环境包括网络场,建议将会话保留在数据库中。在以前的实现中,我使用 Session 毫无问题地按照您的描述进行操作。
我遇到的主要障碍是随着网站流量的增加,用户数据占用了大量内存。我们最终做的是将自定义用户信息存储在自定义 table 中作为 XML 数据,然后根据需要在站点内访问它。
我为确保清理会话所做的一件事是创建一个 custom scheduled task to check the date the data was created and if it was older than XX hours or days, we removed it. OR if a user clicked the log out button, the record was removed in a custom global event。
一个简单的解决方案是仍然使用 Session,只是创建一个自定义宏方法来获取 Session 值。
https://docs.kentico.com/display/K9/Registering+custom+macro+methods
请注意,如果会话是 InProc,在会话中存储每个用户的数据会大大增加内存,如果您的 IIS 服务器开始占用大量内存,您可能需要切换到基于 SQL 的会话。
下一个关于在没有用户信息的情况下对用户进行身份验证的问题,您至少需要创建一个基本用户帐户(将 IsExternal 设置为 true),您不需要做更多的事情,但 Kentico 确实需要CMS_User 中的 User 以便执行很多操作。