在Orchard CMS模块中处理Session_Start

时间:2016-04-21 14:25:08

标签: c# asp.net-mvc orchardcms orchardcms-1.8

一点背景:

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

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

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

或者,是否有其他方法可以挂钩页面生命周期,也可以检查上一页是否是外部推荐人?

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

仅供参考:Orchard版本为1.8 +

2 个答案:

答案 0 :(得分:3)

您可以通过过滤器执行此操作。我之前在我的商务模块中实现了此功能,通常可以为合作伙伴网站的转化提供折扣或归因。您可以在此处查看我的过滤器的源代码:https://github.com/bleroy/Nwazet.Commerce/blob/master/Filters/ReferrerFilter.cs

答案 1 :(得分:2)

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

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
    }
}

显然,也为此创建了一条路线。然后从外部引用者转到将要处理引荐人的路线。 (http://example.com/referrer?referrer=somereferrer