为什么我的 httpsessionstate 正在失去价值?
Why my httpsessionstate is loosing value?
我正在处理 Sitecore 应用程序,该应用程序使用如下代码为未经过身份验证(我想他们不应该经过身份验证)的用户将一些 'items' 存储到购物车中:
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>
我猜你不需要通过身份验证就可以使用会话?
是的,我确实检查了代码,确保没有任何东西使我的会话无效。
当您的布局中没有 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 仍然抱怨无法在 Sitecore.Web.UI.WebControls
命名空间中找到 VisitorIdentification
类型,请检查您的 Web 项目是否引用了 Sitecore.Analytics
,如果 Sitecore.Analytics
在 web.config
中的 <system.web><pages><controls>
中注册:
<add tagPrefix="sc" namespace="Sitecore.Web.UI.WebControls" assembly="Sitecore.Analytics" />
编辑:
考虑为机器人设置数千个会话,并且每个会话在 RAM 使用方面都可能非常繁重。如果它们都保留20分钟,它们可以轻松杀死服务器。这就是 Sitecore 为每个新用户更改会话超时并将其设置为 1 分钟的原因。
如果 Sitecore 布局配置正确并且包含 VisitorIdentification
,您的浏览器将自动向您的服务器执行另一个请求,并且您的会话超时将从 web.config
延长至默认设置(例如 20分钟)
我正在处理 Sitecore 应用程序,该应用程序使用如下代码为未经过身份验证(我想他们不应该经过身份验证)的用户将一些 'items' 存储到购物车中:
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>
我猜你不需要通过身份验证就可以使用会话? 是的,我确实检查了代码,确保没有任何东西使我的会话无效。
当您的布局中没有 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 仍然抱怨无法在 Sitecore.Web.UI.WebControls
命名空间中找到 VisitorIdentification
类型,请检查您的 Web 项目是否引用了 Sitecore.Analytics
,如果 Sitecore.Analytics
在 web.config
中的 <system.web><pages><controls>
中注册:
<add tagPrefix="sc" namespace="Sitecore.Web.UI.WebControls" assembly="Sitecore.Analytics" />
编辑:
考虑为机器人设置数千个会话,并且每个会话在 RAM 使用方面都可能非常繁重。如果它们都保留20分钟,它们可以轻松杀死服务器。这就是 Sitecore 为每个新用户更改会话超时并将其设置为 1 分钟的原因。
如果 Sitecore 布局配置正确并且包含 VisitorIdentification
,您的浏览器将自动向您的服务器执行另一个请求,并且您的会话超时将从 web.config
延长至默认设置(例如 20分钟)