你好我想在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)
感谢任何想法。
答案 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");