C# 在Orchard CMS模块中处理会话\u启动

C# 在Orchard CMS模块中处理会话\u启动,c#,asp.net-mvc,orchardcms,orchardcms-1.8,C#,Asp.net Mvc,Orchardcms,Orchardcms 1.8,一点背景: 我们需要为客户端开发一个定制的Orchard模块,该模块将捕获外部URL引用(如果有的话),并将其存储在会话变量中供以后使用,例如提交对其产品之一的查询 我天真的解决方案是建议我们在会话开始时记录URL引用,因为这是了解用户如何访问我们网站的可靠方法。问题是,客户端不希望我们触摸global.asax.cs文件。它必须通过自定义模块完成。这是不可谈判的 所以我的问题是:当新会话开始使用Orchard模块时,如何可靠地检索和存储URLreferer信息 或者,是否有其他方法可以连接到页

一点背景:

我们需要为客户端开发一个定制的Orchard模块,该模块将捕获外部URL引用(如果有的话),并将其存储在会话变量中供以后使用,例如提交对其产品之一的查询

我天真的解决方案是建议我们在会话开始时记录URL引用,因为这是了解用户如何访问我们网站的可靠方法。问题是,客户端不希望我们触摸global.asax.cs文件。它必须通过自定义模块完成。这是不可谈判的

所以我的问题是:当新会话开始使用Orchard模块时,如何可靠地检索和存储URLreferer信息

或者,是否有其他方法可以连接到页面生命周期,并检查上一个页面是否是外部推荐人

我最关心的是,我需要知道是否有人点击了赞助商链接,我需要在模块中找到,而不是global.asax.cs。我不会死盯着任何特定的跟踪方法,只要在Orchard框架中考虑到对我施加的限制,它是可能的


仅供参考:Orchard版本是1.8+

我要做的是创建一个自定义模块,并在其中创建一个自定义控制器:

public class ReferrerController : Controller {
    public ActionResult Index(string referrer) {

        if (Session["Referrer"] != null) {
            // do nothing, already used as entry point in the current session
        } else {
            // handle referrer, probably also some timestamp or hash
            Session["Referrer"] = referrer; // save in session
        }
        return RedirectToRoute("~/"); // redirect to home
    }
}

显然,还要为此创建一个路由。然后,从外部推荐人转到将处理推荐人的此路径。()

我要做的是创建一个自定义模块,并在其中创建一个自定义控制器:

public class ReferrerController : Controller {
    public ActionResult Index(string referrer) {

        if (Session["Referrer"] != null) {
            // do nothing, already used as entry point in the current session
        } else {
            // handle referrer, probably also some timestamp or hash
            Session["Referrer"] = referrer; // save in session
        }
        return RedirectToRoute("~/"); // redirect to home
    }
}

显然,还要为此创建一个路由。然后,从外部推荐人转到将处理推荐人的此路径。()

您可以通过过滤器执行此操作。我不久前在我的商务模块中实现了这一点,以便能够为来自合作伙伴站点的转换提供折扣或属性。您可以在此处看到my filter的源代码:

您可以从筛选器执行此操作。我不久前在我的商务模块中实现了这一点,以便能够为来自合作伙伴站点的转换提供折扣或属性。您可以在此处查看我的过滤器的源代码:

谢谢。但我无法控制推荐人登录的页面。但我会给你们一个投票,因为我没有在问题中明确说明这一部分。避免使用会话。改用cookies。@SzymonSeliga我很感兴趣,这节课怎么办?禁用Cookie的用户如何?如果用户禁用Cookie(没有人应该这么做),那么会话也会中断,因为它依赖于Cookie(有一些无cookieless会话在技术上是可行的,但现在的共识是这些会话很糟糕,不应该使用-fwiw,它们依赖URL令牌,需要重写站点上的所有链接;ew-)。谢谢。但我无法控制推荐人登录的页面。但我会给你一个投票权,因为我在问题中没有明确说明这一部分。避免使用会话。改用cookies。@Szymonseiga我很感兴趣,会话有什么用?禁用cookies的用户如何?如果用户禁用cookies(没有人应该这么做),然后会话也会中断,因为它依赖于cookie(有一些无Cookie会话在技术上是可能的,但现在人们几乎一致认为这些会话很糟糕,不应该使用-fwiw,它们依赖URL令牌,需要重写站点上的所有链接;ew-)。我假设您的客户不仅希望您不接触global.asax.cs,而且希望您不接触Orchard核心模块,对吗?否则,您可以在DefaultOrchardHosts.BeginRequest()中构建eventHandler并启动它方法。你假设是正确的。我基本上必须通过我描述的一个模块来完成。这太糟糕了,我花了相当长的时间搜索源代码,寻找一个可以连接的地方,但似乎这个特定的东西还无法访问。也许今天晚些时候我会发现一些东西。我假设你的客户不仅希望你不要接触全局.asax.cs但是Orchard核心模块一般来说是正确的吗?否则您可以构建一个eventHandler并从DefaultOrchardHosts.BeginRequest()中启动它方法。你假设是正确的。我基本上被困在必须通过我描述的模块来完成它。这太糟糕了,我花了相当长的时间搜索源代码,寻找一个可以连接的地方,但似乎这个特定的东西还不可访问。也许我今天晚些时候会找到一些东西