asp.net 使用 Application 限制单一登录

原理:用户登录后系统会分配一个与用户唯一对应的SessionID,将当前用户ID与其SessionID对应保存在Application中,一旦该用户在其他地方重复登录则Application中保存的SessionID就会被更新,导致当前session中的SessionID与Application中的SessionID不再一致

用户登录后保存SessionID在Application中

private static void RecordLogin(string strUId)
{
HttpContext.Current.Application.Lock();
HttpContext.Current.Application["SESSIONID_" + strUId] = HttpContext.Current.Session.SessionID;
HttpContext.Current.Application.UnLock();
}

判断方法

public static bool CheckRepeatLogin(string strUId)
{
object objSessionId = HttpContext.Current.Application["SESSIONID_" + strUId];
if (objSessionId == null || objSessionId.ToString() == "") return false; return objSessionId.ToString() != HttpContext.Current.Session.SessionID;
}

aspx页面跳转时判断:添加基类 BasePage.cs

public class BasePage:System.Web.UI.Page
{
public UserInfo CurUser = null; protected override void OnInitComplete(EventArgs e)
{
CurUser = CurSession.CurUser; if (CurUser == null)
{
Response.Redirect(SysHelper.GetVirtualPath() + "pagesessionnull.html", true);
} if (LoginService.CheckRepeatLogin(CurUser.UId))
{
Response.Redirect(SysHelper.GetVirtualPath() + "pagerepeatlogin.html", true);
} base.OnInitComplete(e);
} protected override void OnLoadComplete(EventArgs e)
{
Response.Cache.SetNoStore();
base.OnLoadComplete(e);
}
}

ashx页面请求时判断:添加基类 BaseHandler.cs

public class BaseHandler : IHttpHandler, IRequiresSessionState
{
public UserInfo CurUser = null;
public HttpContext CurContext = null; public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.Charset = "utf-8";
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); try
{
CurUser = CurSession.CurUser;
CurContext = context; if (CurUser == null)
{
context.Response.Write(JsonHelper.GetResult(false, "登录超时,请重新登录", new { rcode = - }));
}
else if (LoginService.CheckRepeatLogin(CurUser.UId))
{
context.Response.Write(JsonHelper.GetResult(false, "您的帐号在其他地方登录,您已经被踢出,请重新登录", new { rcode = - }));
}
else
{
context.Response.Write(ActionMethod());
}
}
catch (Exception ex)
{
context.Response.Write(JsonHelper.GetResult(ex.Message.ToString()));
}
finally
{
context.Response.End();
}
} public virtual string ActionMethod()
{
return JsonHelper.GetResult();
}
public bool IsReusable
{
get
{
return false;
}
}
}

asp.net单一登录的更多相关文章

  1. MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

    在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细 ...

  2. [转]MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

    本文转自:http://www.cnblogs.com/jesse2013/p/aspnet-identity-claims-based-authentication-and-owin.html 在M ...

  3. MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN -摘自网络

    在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细 ...

  4. (转)ASP.NET Identity登录原理 - Claims-based认证和OWIN

    在Membership系列的最后一篇引入了ASP.NET  Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详 ...

  5. ASP.NET Identity登录原理 - Claims-based认证和OWIN

    MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN 在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣 ...

  6. ASP.NET中登录时记住用户名和密码(附源码下载)--ASP.NET

    必需了解的:实例需要做的是Cookie对象的创建和对Cookie对象数据的读取,通过Response对象的Cookies属性创建Cookie,通过Request对象的Cookies可以读取Cookie ...

  7. ASP.NET Core 登录失败。该登录名来自不受信任的域,不能与集成身份验证一起使用。

    原文:ASP.NET Core 登录失败.该登录名来自不受信任的域,不能与集成身份验证一起使用. 当进行数据迁移的时候提示 修改appsettings配置连接串的Trusted_Connection ...

  8. ASP.NET中登录功能的简单逻辑设计

     ASP.NET中登录功能的简单逻辑设计                               概述                               逻辑设计             ...

  9. 【Azure Active Directory】单一登录 (SAML 协议)

    Azure Active Directory 支持 SAML 2.0 Web 浏览器单一登录 (SSO) 配置文件. 若要请求 Azure Active Directory 对用户进行身份验证时,云服 ...

随机推荐

  1. Java向上下转型中的陷阱{详细}

    1: 多态   多态时继承下面的产物,之所以存在向上向下转型的目的,就是解决参数传递的不变形,体现面向接口编程的重要性, 1.1 方法的多态性   ①. 方法的重载:同一个方法名称可以根据参数的类型或 ...

  2. view WITH CHECK OPTION where-clause violation(查看与检查选项where-子句违反)

    创建视图的语句是设置了 WITH CHECK OPTION 这个条件; 创建视图时,sql语句是这样写的: CREATE  OR  REPLACE  VIEW  RZ_TST_VIEW AS WHER ...

  3. (五十一)c#Winform自定义控件-文字提示-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  4. Winform中自定义添加ZedGraph右键实现设置所有Y轴刻度的上下限

    场景 Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  5. FCC---Create a Gradual CSS Linear Gradient

    Applied Visual Design: Create a Gradual CSS Linear Gradient background: linear-gradient(gradient_dir ...

  6. ArcGIS以数据库作为数据源作为source发布服务步骤详解(以Postgresql为例)及各种发布问题

    创建企业级数据库 Data Management Tools-->Geodatabase Administration-->Create Enterprise Geodatabase 按如 ...

  7. iOS中点击按钮跳转到外部浏览器和内部打开

    如图所示,需要实现点击一个按钮,跳转到指定网页: -(void)pushBtnCellClickDeleate{ NSLog(@"跳转"); //在APP内部打开指定网页 UIWe ...

  8. Swift实战技巧

    Swift实战技巧 从OC转战到Swift,差别还是蛮大的,本文记录了我再从OC转到Swift开发过程中遇到的一些问题,然后把我遇到的这些问题记录形成文章,大体上是一些Swift语言下面的一些技巧,希 ...

  9. MySQL数据库:在命令提示符中使用mysql

    服务启动 在命令提示符中 启动mysql服务 net start mysql 停止mysql服务 net sotp mysql 通过命令行进入 mysql -u 用户名 -p 键入后会提示输入密码 如 ...

  10. 网络时间服务和chrony

    ⽹络时间服务和chrony 实验练习: 准备实验环境: 可用的centos6.7系统. centos6 :192.168.37.6 centos7 :192.168.37.7 关闭selinux 关闭 ...