2016-04-01 11 views
0

シングルユーザー名からの複数ログインを防止する方法は?私はユーザー名とパスワードをデータベースに保存しています。私はユーザーが一度に1つの場所からのみログインするようにしたい。シングルユーザー名からの複数ログインを防止する方法

ASP.NETアプリケーションを構成する方法の詳細については、下記をご覧ください以下

http://go.microsoft.com/fwlink/?LinkId=169433は私が

設定ファイル

<configuration>        
    <system.web> 
     <compilation debug="true" targetFramework="4.5" /> 
     <httpRuntime targetFramework="4.5" /> 
     <httpModules> 
      <add name="SingleSessionEnforcement" type="SingleSessionEnforcement" /> 
     </httpModules> 
    </system.web> 
    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
     <modules runAllManagedModulesForAllRequests="false" > 
      <add name="SingleSessionEnforcement" type="SingleSessionEnforcement" /> 
     </modules> 
    </system.webServer> 
</configuration> 

クラスファイル

しようとしたコードです
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 

namespace Demo1 
{ 
    public class SingleSessionEnforcement : IHttpModule 
    { 
     public SingleSessionEnforcement() 
     { 
      // No construction needed 
     } 

     private void OnPostAuthenticate(Object sender, EventArgs e) 
     { 
      Guid sessionToken; 

      HttpApplication httpApplication = (HttpApplication)sender; 
      HttpContext httpContext = httpApplication.Context; 

      // Check user's session token 
      if (httpContext.User.Identity.IsAuthenticated) 
      { 
       FormsAuthenticationTicket authenticationTicket = 
              ((FormsIdentity)httpContext.User.Identity).Ticket; 

       if (authenticationTicket.UserData != "") 
       { 
        sessionToken = new Guid(authenticationTicket.UserData); 
       } 
       else 
       { 
        // No authentication ticket found so logout this user 
        // Should never hit this code 
        FormsAuthentication.SignOut(); 
        FormsAuthentication.RedirectToLoginPage(); 
        return; 
       } 

       MembershipUser currentUser = Membership.GetUser(authenticationTicket.Name); 

       // May want to add a conditional here so we only check 
       // if the user needs to be checked. For instance, your business 
       // rules for the application may state that users in the Admin 
       // role are allowed to have multiple sessions 
       Guid storedToken = new Guid(currentUser.Comment); 

       if (sessionToken != storedToken) 
       { 
        // Stored session does not match one in authentication 
        // ticket so logout the user 
        FormsAuthentication.SignOut(); 
        FormsAuthentication.RedirectToLoginPage(); 
       } 
      } 
     } 

     public void Dispose() 
     { 
      // Nothing to dispose 
     } 

     public void Init(HttpApplication context) 
     { 
      context.PostAuthenticateRequest += new EventHandler(OnPostAuthenticate); 
     } 
    } 
} 

ASPX.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace Demo1 
{ 
    public partial class login : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      //TextBox userNameTextBox = (TextBox)LoginUser.FindControl("UserName"); 
      SingleSessionPreparation.CreateAndStoreSessionToken(userNameTextBox.Text); 
     } 

    } 
} 

ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="Demo1.login" %> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <asp:TextBox ID="userNameTextBox" runat="server"></asp:TextBox><br/> 
      Password: <asp:TextBox ID="PasswordTextBox" runat="server"></asp:TextBox><br/> 
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
     </div> 
    </form> 
</body> 
</html> 

それはこのエラーを与えている:

Could not load type 'SingleSessionEnforcement'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Could not load type 'SingleSessionEnforcement'.

エラーの添付画像REFEREてください:

Error image

を解決するために私を導いてください。問題。あなたが解決策を持っている可能性があり、この時点で

<add name="SingleSessionEnforcement" type="Demo1.SingleSessionEnforcement" /> 
+2

CSSが良いだろうページレイアウトのために ' 'の束よりも。 –

答えて

1

type属性には、名前空間を含める必要があります。そうでない場合は、以下の私のコメントを参照してください。

問題はweb.configファイルにあります。 Httpmoduleはconfigファイルで一度だけ起動できます。

IIS 7.0以下、それは> IIS 7.0をされている場合はsystem.webServerで、次のいずれかを使用し、 <httpModules> <add name="SingleSessionEnforcement" type="SingleSessionEnforcement" /> </httpModules>

ののsystem.webで、次のいずれかを使用する場合は、 <modules> <add name="SingleSessionEnforcement" type="SingleSessionEnforcement" /> </modules>

0

希望:

+0

こんにちはシヴァ、ようこそ!彼の答えにリチャードが示唆したように、名前空間を型属性に含めるべきではありませんか? –

関連する問題