2013-06-10 2 views
0

안녕하십니까. sesstion 만료 이벤트에 일부 기능을 사용하고 싶습니다. sitecore에 다음 pipleline을 생성했습니다. 내 사용자 지정 작업 후 로그인 페이지로 리디렉션해야합니다. 하지만 리디렉션 액션에 대한 열정이 듭니다.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의에서 설정은 없음이나 양식 모드에서 어떤 아이디어에 대한

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

감사를하지 작동하지 않습니다. endArgs이 컨텍스트 속성이있는 경우

+0

정확한 예외는 무엇입니까? – geedubb

+0

nullreferenceexception을 알면 유용 할 것입니다. 본체에 스택 트레이스를 넣으십시오. –

+0

endArgs에서 httpcontext에 대한 참조를 얻을 수 있습니까? 죄송합니다. Sitecore에 대한 액세스 권한이 없습니다. – geedubb

답변

0

당신은 같은 것을 할 수 있습니다

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

아니요. 그것은 동일한 예외를 호출 –

+0

미안하지만 – geedubb

2

세션 종료가 서버에 의해 관리된다, 그래서 그것과 관련된 클라이언트 요청 또는 응답이 없습니다. 보고있는 오류는 대부분 HttpContext.Current.Response이 null로 인해 발생합니다.

대신 sessionEnd 파이프 라인을 활용, 당신은 httpRequestBegin에 후킹 모든 요청에 ​​세션 변수의 존재를 확인하는 것이 좋습니다 : 또는

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

, 당신은 정기적으로 자바 스크립트를 통해 웹 서비스를 호출 할 수 있습니다 세션의 상태를 확인하십시오. 여기서 이점은 사용자에게 세션이 시간 초과됨을 알리고 로그인 상태를 유지할 수 있다는 것입니다.

+0

감사하지만 세션이 만료되기 전에 얼마나 많은 시간을 확인하는 방법? –

+0

@ a3code 한 가지 방법은'window.setTimeout' 자바 스크립트 메소드를 사용하여 세션이 끝나기 1-2 분 전에 경고를 발생시키는 것입니다. –

+0

세션을 계속 확인하려면 확인 요청이 세션을 계속 유지하고 있는지 확인해야합니다. – geedubb