asp.Net重複登録、強制ラインオフ

3349 ワード

ログイン時に、パスワードアカウントが正しいかどうかを判断し、正しい場合はGuid(グローバル識別子)を現在のユーザに割り当て、グローバル変数に現在のユーザのIdとそのGuidを格納する.コードは次のとおりです.
 //         
string Guid_str = "";
 //         
Guid_str = Guid.NewGuid().ToString();
Response.Cookies["GUID"].Value = Guid_str;
//          ,Uid      ,GUID       
Application[user.Id + "_GUID"] = Guid_str;
Session["Uid"] = user.Id;
次に、一般的なプロセッサを作成します.
注意:セッションを使用する場合はインタフェースを継承し、セッションStateネーミングスペースを導入する必要があります.そうしないと、セッションはnullになります.
using System;
using System.Web;
using System.Runtime.Serialization.Json;
using BLL;
using Model;
//  :    session        ,    SessionState    
using System.Web.SessionState;
public class RepeatLogin : IHttpHandler,IRequiresSessionState{
 
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        //    
        HttpApplicationState applicationState = HttpContext.Current.Application;
        string message = "";
        string Uid = "";
        //  Session     
        if (context.Session["Uid"] == null)
        {
            message = "Disabled";
        }
        else
        {
            //  session     id
            Uid = context.Session["Uid"].ToString();
            //      
            if (context.Request.Cookies["GUID"] != null && applicationState[Uid + "_GUID"] != null)
            {
                //          
                if (applicationState[Uid + "_GUID"].ToString() != context.Request.Cookies["GUID"].Value)
                {
                    message = "Logined";
                }
            }
            //       (          )
            if (new UserManager().GetUsers_ByUid(context.Session["Uid"].ToString()).States == 1)
            {
                message = "Freezed";
            }
        }
        //  
        DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(string));
        ds.WriteObject(context.Response.OutputStream, message);
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }
 
}
js関数を作成します(ページを個別に作成し、検証が必要なページをiframeで呼び出すことができます)、LogOutページはセッションの失効とログインページへのジャンプを処理します.
//      
    function RepeatLogin() {
        $.getJSON("../Handlers/RepeatLogin.ashx", function (data) {
            if (data == "Logined") {
                alert('         !      !');
                window.location.href = '../LogOut.aspx';
            }
            if (data == "Freezed") {
                alert('         !');
                window.location.href = '../LogOut.aspx';
            }
            if (data == "Disabled") {
                alert('       ,     !');
                window.location.href = '../LogOut.aspx';
            }
        })
    }
そして判断するページでjs操作を行います
$(function(){
    //      
   RepeatLogin();
    //        
   setInterval(RepeatLogin,1000);
})
ユーザが繰り返しログインしていない場合、システムは1つのguidをユーザに割り当て、ユーザidと対応するguidを記録する.このユーザがオンラインの場合、システム変数に格納されているユーザidおよび対応するguidの値は変わらない.この場合、別のユーザが同じアカウントでログインすると、システム変数におけるユーザidに対応するguidが変更され、一般的な処理プログラムは、システム変数に格納されているguidがユーザcookieに格納されているguidと異なると判断するユーザーにラインオフを強制します.