Kentico使用内存中的数据来实现Web部件的可见性

时间:2016-07-06 18:49:51

标签: kentico

我们正在开发一个网站,我们希望通过调用外部服务来验证用户。当用户通过身份验证时,我们正在接收用户配置文件,并且我想使用配置文件数据来填充内容元素,例如静态文本Web部件,或者将其用于可见性条件。 问题是我不想将数据存储在UserSettings或自定义表中,因为请求是将配置文件数据仅保留在内存中。 由于调用是通过自定义Web部件完成的,因此解决方案是将从外部服务接收的配置文件存储到会话中,然后通过调用{% Session["Name"] %}或使用SessionHelper在页面中使用它。 似乎Session访问仅在Web部件代码中起作用,而不是从页面内容起作用。 我还尝试使用未存储在数据库中的自定义字段,但出于某种原因,{% CurrentUser.UserSettings.ItemsAsFields.Name #%}也无法看到它们。 有没有办法在内存中存储和访问数据而无需创建存储在数据库中的自定义字段? 还有一种方法可以在Kentico中验证用户,而无需在数据库中获得实际的用户信息吗?

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案是仍然使用Session,只需创建一个自定义宏方法来获取Session值。

https://docs.kentico.com/display/K9/Registering+custom+macro+methods

请注意,如果Session是InProc,每个用户在会话中存储数据会大大增加内存,如果IIS服务器内存开始变高,您可能希望切换到基于SQL的会话。

关于在没有用户信息的情况下对用户进行身份验证的下一个问题,您至少需要创建一个基本的用户帐户(IsExternal设置为true),您不需要真正超越它,但Kentico确实需要CMS_User中的用户,以便执行很多操作。

答案 1 :(得分:1)

根据您的环境,您可能需要use SQL Server Session与InProc正常工作。更具体地说,如果您的环境包括Web场,则建议会话在数据库中保留。在之前的实现中,我使用了Session,没有问题,如您所述。

我遇到的主要障碍是当流量增加到网站时,此用户数据占用了大量内存。我们最终做的是将自定义用户信息作为XML数据存储在自定义表中,然后根据需要在站点内访问它。

我确保清理会话的一件事是创建一个custom scheduled task来检查数据的创建日期,如果它早于XX小时或几天,我们将其删除。或者,如果用户单击了注销按钮,则会在custom global event中删除该记录。