asp.Net重複登録、強制ラインオフ
3349 ワード
ログイン時に、パスワードアカウントが正しいかどうかを判断し、正しい場合はGuid(グローバル識別子)を現在のユーザに割り当て、グローバル変数に現在のユーザのIdとそのGuidを格納する.コードは次のとおりです.
注意:セッションを使用する場合はインタフェースを継承し、セッションStateネーミングスペースを導入する必要があります.そうしないと、セッションはnullになります.
//
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と異なると判断するユーザーにラインオフを強制します.