2013-06-10 2 views
0

Здравствуйте, я хотел бы иметь некоторую функциональность на истекшем событии sesstion, Я создал следующий pipleline для sitecore. после моего пользовательского действия мне нужно сделать перенаправление на страницу входа. но я получил преимущество над перенаправлением.Sitecore перенаправляет страницу входа из sessionEnd конвейера

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, ни форм режиме

<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

Какое точное исключение? Было бы полезно знать – geedubb

+0

nullreferenceexception положить stacktrace в основной корпус –

+0

вы можете получить ссылку на httpcontext от endArgs? К сожалению, у меня нет доступа к Sitecore только сейчас, чтобы проверить – geedubb

ответ

0

Если endArgs имеет свойство контекста, вы можете быть в состоянии сделать что-то вроде:

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

№. он вызывает то же исключение –

+0

извините, я не могу помочь – geedubb

2

конца сеанса управляются сервером, поэтому нет запроса нет клиента или ответа, связанного с ним. Ошибка, которую вы видите, скорее всего вызвана HttpContext.Current.Response, равным нулю.

Вместо врезки в sessionEnd трубопровода, вы можете рассмотреть возможность подключения в httpRequestBegin и проверки на наличие переменной сессии по каждому запросу:

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

В качестве альтернативы, вы можете периодически вызывать веб-службы с помощью JavaScript для проверьте состояние сеанса. Преимущество здесь в том, что вы можете предупредить пользователя о том, что сессия собирается тайм-аут, и предлагать оставаться в системе.

+0

спасибо, но как проверить, сколько времени осталось до окончания сессии? –

+0

@ a3code одним способом является использование JavaScript-метода 'window.setTimeout' для запуска предупреждения за минуту или две до окончания сеанса. –

+0

Если вы продолжаете проверять сеанс, вам нужно убедиться, что запрос на проверку не поддерживает сеанс! – geedubb

Смежные вопросы