2016-04-21 6 views
1

ich eine Variable in meinem DataEntityLayer haben, die für alle Nutzer zum Beispiel gemeinsam sindVariablen geht Null

public class DataEntityLayer : System.Web.UI.Page 
{ 
    public string UserName 
     { 
      get 
      { 
       if (Session["UserName"] == null) 
       { 
        GotoLoginPage(); 
        return null; 
       } 
       else 
        return Session["UserName"].ToString(); 
      } 

      set { Session["UserName"] = value; } 
     } 
} 

ich diese Variable bin mit Benutzername angezeigt wird, wenn sich ein Benutzer anmeldet, wird diese feine Arbeit geht aber null häufig. Wie kann ich das vermeiden oder lassen Sie mich wissen, eine Möglichkeit, eine Variable in meinem Layer den Benutzernamen eines Benutzers anzuzeigen, wenn er sich anmeldet.

Antwort

5

Sitzung ist temporärer Speicher, der nach einer bestimmten Zeit abläuft, glaube ich, die Standardeinstellung ist 20 Minuten Inaktivität.

Es könnte auch sein, weil Sie mehrere Server mit Lastenausgleich verwenden. Wenn die Sitzung nicht in einer Datenbank gespeichert ist, geht die Sitzung verloren, wenn Sie von einem Server zu einem anderen wechseln.

Ich würde empfehlen, diesen Ansatz aus den oben genannten Gründen zu vermeiden. Es gibt bessere und sicherere Möglichkeiten zur Authentifizierung.

P.S Ein Objekt namens DataEntityLayer sollte nicht von System.Web.UI.Page stammen !!

+0

Ich muss meine Dataentitylayer in jeder Klasse instanziiert wo ich nutzen, um die Variable davon ?? –

+0

Es ist nur die Namenskonkurrenz. Da es von System.Web.UI.Page abgeleitet ist, handelt es sich um eine Webseite, so dass es nicht weiter entfernt sein kann, etwas mit dem Datenzugriff zu tun zu haben. In Bezug auf die Authentifizierung würde ich empfehlen, etwas wie .Net Identity zu verwenden. Sie wissen nicht viel über Sicherheit (nicht ich), also lassen Sie die Experten sich darum kümmern. –

2

Ich stimme @johnMc in Bezug auf die Sicherheit vollkommen zu, am besten benutze eine Bibliothek oder ein Paket, das eine Gesamtlösung ergibt. Der Vollständigkeit halber könnte der Grund für den Verlust der Sitzung auch sein, dass der Dienst in einer Multithread-Anwendung ausgeführt wird. Wenn Sie IIS verwenden, können Sie einen Dienst namens "ASP.Net-Statusdienst" aktivieren und dann in Ihrer Webkonfiguration aktivieren. Dies führt die Verarbeitung von Out-of-Process-Sitzungen für ASP.net aus. Es gibt auch eine Möglichkeit, eine Verbindung mit diesem Dienst über Nicht-IIS herzustellen, aber Sie müssen eine Communicator-Klasse erstellen, um dies zu handhaben. Es gibt einen kleinen Leistungseinbruch für diesen Prozess, aber ich hatte nie Probleme bei hohen Lasten.

<system.web> 
    <sessionState mode="StateServer" /> 
</system.web> 

(ich würde kommentiert habe, aber ich kann keinen Kommentar noch? Hinzufügen) :)

Verwandte Themen