Sitecore从sessionEnd管道重定向到登录页面

时间:2013-06-10 21:57:42

标签: asp.net sitecore sitecore6

你好我想在sesstion expired事件上有一些功能, 我为sitecore创建了下一个pipleline。在我的自定义操作后,我需要重定向到登录页面。但是我对重定向行动有所了解。

 public class SessionEnd2
    {
        public  void Process(SessionEndArgs endArgs)
        {
            Assert.ArgumentNotNull(endArgs, "args");
            //do some stuff here
            HttpContext.Current.Response.Redirect("~/login.aspx");
            //WebUtil.Redirect("~/login.aspx", false);

        }
    }

似乎我不能在这种类型的piplelines中重定向。 但我需要有办法显示用户登录页面。 web.config中的设置不适用于None或Forms模式

 <authentication mode="None">
      <forms  name=".ASPXAUTH" cookieless="UseCookies" loginUrl="~/Login.aspx" timeout="1" slidingExpiration="false" defaultUrl="~/main.aspx"    />
  </authentication>


   в System.Web.HttpResponse.End()
   в System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent)
   в System.Web.HttpResponse.Redirect(String url)
   в MyLib.SessionEnd2.Process(SessionEndArgs endArgs) в d:\Projects\MyProj\Website\SessionEnd.cs:строка 30
   в (Object , Object[] )
   в Sitecore.Pipelines.PipelineMethod.Invoke(Object[] parameters)
   в Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   в Sitecore.Pipelines.CorePipeline.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
   в Sitecore.Pipelines.CorePipeline.Run(String pipelineName, PipelineArgs args, String pipelineDomain)

感谢任何想法。

2 个答案:

答案 0 :(得分:2)

会话结束由服务器管理,因此没有与之关联的客户端请求或响应。您看到的错误很可能是由HttpContext.Current.Response为空引起的。

您可以考虑挂钩sessionEnd并检查每个请求是否存在Session变量,而不是点击httpRequestBegin管道:

if (Session["Username"] == null)
    // Redirect to login page

或者,您可以通过JavaScript定期调用Web服务来检查会话的状态。这样做的好处是,您可以警告用户会话即将超时,并提供保持登录状态。

答案 1 :(得分:0)

如果endArgs具有Context属性,您可以执行以下操作:

endArgs.Context.Response.Redirect("~/login.aspx");