我正在处理Sitecore应用程序,该应用程序存储了一些'项目'使用以下代码进入未经过身份验证的用户(我猜他们不应该这样):
this.Session["abc"]
然后,一旦用户到达购物车页面并希望继续进行,那么如果他等待的时间超过一分钟,那么会话中的价值就会丢失!
以下是我的web.config
相关设置:
我在这里结束了,并且不知道什么在清理会话?
<sessionState mode="InProc" cookieless="false" timeout="20" sessionIDManagerType="Sitecore.FXM.SessionManagement.ConditionalSessionIdManager">
<providers>
<add name="mongo" type="Sitecore.SessionProvider.MongoDB.MongoSessionStateProvider, Sitecore.SessionProvider.MongoDB" sessionType="Standard" connectionStringName="session" pollingInterval="2" compression="true" />
<add name="mssql" type="Sitecore.SessionProvider.Sql.SqlSessionStateProvider, Sitecore.SessionProvider.Sql" sessionType="Standard" connectionStringName="session" pollingInterval="2" compression="true" />
</providers>
</sessionState>
和
<authentication mode="None">
<forms name=".ASPXAUTH" cookieless="UseCookies" timeout="90" />
</authentication>
我猜您不需要通过身份验证才能使用会话? 是的,我确实检查了代码,确保没有任何东西使我的会话无效。
答案 0 :(得分:7)
当您的布局中没有VisitorIdentification
时,通常会发生1分钟会话超时的问题。 Sitecore将每个新访客视为潜在的爬行机器人,如果没有必要,不要使用20分钟的会话。
确保布局中包含VisitorIdentification
。您可以像以下那样为Web窗体添加它:
<%@ Import Namespace="Sitecore.Analytics" %>
<sc:VisitorIdentification runat="server" />
和MVC一样:
@using Sitecore.Mvc.Analytics.Extensions
@Html.Sitecore().VisitorIdentification()
如果您的Visual Studio仍然抱怨它无法在VisitorIdentification
命名空间中找到Sitecore.Web.UI.WebControls
,请检查您的网络项目是否引用了Sitecore.Analytics
以及Sitecore.Analytics
是否已注册<system.web><pages><controls>
中的web.config
:
<add tagPrefix="sc" namespace="Sitecore.Web.UI.WebControls" assembly="Sitecore.Analytics" />
修改强>:
考虑为机器人设置数千个会话,并且每个会话在RAM使用方面都非常重要。如果它们全部保留20分钟,它们可以轻松地杀死服务器。这就是Sitecore为每个新用户更改会话超时并将其设置为1分钟的原因。
如果Sitecore布局配置正确并且包含VisitorIdentification
,您的浏览器将自动执行对您服务器的另一个请求,您的会话超时将从web.config
扩展到默认设置(例如20分钟)