2016-05-22 2 views
1

私はセッションを確認するために、私はセッションをチェックするときにいくつかの時間を再確認するときに私はページをリフレッシュするか、セッションがnullではない、それは方法についていくつかの時間のリターンですが、特定のページについてはnullいくつかの時間ではありませんセッション値を取得し、Webサービスでの私の方法と私はそれは問題がセッションアフィニティではJavaScriptセッションいくつかの時間はリターンNullといくつかの時間リターンの値

[WebMethod(EnableSession = true)]    
    public object CheckIfLoggedin() 
    { 
     try 
     { 
      return new { Result = resultEnum.ok, Records = GetUserID() }; 

     } 
     catch 
     { 
      return new { Result = resultEnum.error }; 
     } 

    } 
    private Guid? GetUserID() 
    { 
     if (Context.Session["User"] != null) 
     { 
      string userid = Context.Session["User"].ToString(); 
      if (userid != "") 
       return new Guid(userid); 
      else 
       return null; 
     } 
     else 
      return null; 
    } 

    function CheckIfLoggedin() { 

var status = 0; 

var ItemCount; 
$.ajax({ 

    type: "POST", 
    url: "../../../../_layouts/15/TripPlannerFrontend/TripPlannerSrv.asmx/CheckIfLoggedin", 

    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: true, 
    success: function (res) { 
     if (res.d.Result === 2) { 
      var userid = res.d.Records; 
      if (userid == null) { 
       // 
      } 
      else { 

       //window.location = "TripPlanner.aspx"; 
       var returnurl = GetQueryString("returnurl"); 
       if (returnurl != null && returnurl !== "") 
        window.location = returnurl; 
       else 
        window.location = "TripPlanner.aspx"; 
      } 

     } 
     else 
      console.log("try again"); 
    }, 
    error: function (response) { 
     console.log("try again"); 
    } 
}); 
    }; 
+0

セッションの有効期限についてチェックしてください...有効期限が切れている可能性があります...セッションが有効期限切れの場合は –

+0

私はページを更新するとそれを読むことはできませんが、私はセッションを読むことができます、私はときどきセッションがnullになる不思議な問題に直面します。この問題はあまり一貫しておらず、時にはセッションがnullであり、時にはそうではない –

答えて

1

を使用して呼び出します。複数のWebフロントエンドとロードバランサがこれらのSPサーバーのいずれかに要求をディスパッチすると、最初の要求がサーバーAにルーティングされ、セッションが作成され、クライアントによって2番目の要求が発行されると、セッションが存在しないサーバーBにリダイレクトされる可能性があります。

ロードバランサに「セッションアフィニティ」を設定するのが最善の方法です。つまり、特定のクライアントにWebフロントエンドの1つが割り当てられると、その後のすべての要求は同じセッションにリダイレクトされますサーバ。ロードバランサの管理者に、セッションアフィニティ設定がある場合は、彼のレベルでこれを設定できるかどうかを尋ねてください(ロードバランシングに使用する技術に依存します)。

関連する問題