asp.net单一登录
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单一登录的更多相关文章
- MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN
在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细 ...
- [转]MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN
本文转自:http://www.cnblogs.com/jesse2013/p/aspnet-identity-claims-based-authentication-and-owin.html 在M ...
- MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN -摘自网络
在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细 ...
- (转)ASP.NET Identity登录原理 - Claims-based认证和OWIN
在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详 ...
- ASP.NET Identity登录原理 - Claims-based认证和OWIN
MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN 在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣 ...
- ASP.NET中登录时记住用户名和密码(附源码下载)--ASP.NET
必需了解的:实例需要做的是Cookie对象的创建和对Cookie对象数据的读取,通过Response对象的Cookies属性创建Cookie,通过Request对象的Cookies可以读取Cookie ...
- ASP.NET Core 登录失败。该登录名来自不受信任的域,不能与集成身份验证一起使用。
原文:ASP.NET Core 登录失败.该登录名来自不受信任的域,不能与集成身份验证一起使用. 当进行数据迁移的时候提示 修改appsettings配置连接串的Trusted_Connection ...
- ASP.NET中登录功能的简单逻辑设计
ASP.NET中登录功能的简单逻辑设计 概述 逻辑设计 ...
- 【Azure Active Directory】单一登录 (SAML 协议)
Azure Active Directory 支持 SAML 2.0 Web 浏览器单一登录 (SSO) 配置文件. 若要请求 Azure Active Directory 对用户进行身份验证时,云服 ...
随机推荐
- [考试反思]1113csp-s模拟测试114:一梦
自闭.不废话.写一下低错. T1:觉得信心赛T1不会很恶心一遍过样例直接没对拍(其实是想写完T2之后回来对拍的) 状态也不好,基本全机房都开始码了我还没想出来(skyh已经开T2了).想了40多分钟. ...
- Python中容易忽视的知识点
今天坐在实验室,觉得有点无聊,想了下,很久没写博客了,就来写一点,正好遇到了一个有意思的小问题,分享给大家. 首先我们通过一个小的实验来看一下内容: 不管是 Python2 还是 Python3 环境 ...
- Hive部分函数解析
Hive部分函数解析 Hive里的exists ,in ,not exists ,not in 相关函数 表数据准备: 1.选择指定数据库 eg: use bg_database1; 2. 创建表 ...
- 普通的maven项目,如何打成一个fat jar(包括了全部依赖jar包)?
1.前言 用过spring boot的同学肯定知道,现在web项目可以直接打成jar包运行,相当方便. 那么普通项目如何配置(非spring boot),才能打成一个类似的jar包呢? 2.解决方案: ...
- java遍历request.getParameterMap()中的值
在开发过程中发现request对象有提供一个request.getParameterMap()方法可以获取到从前端请求发送的参数Map. 但是在使用get()方法通过key(键)去获取这个参数Map中 ...
- 从web到游戏,走出舒适区
最近很久没有更新博客了,实在太忙.因为在这段时间里我做了一个改变了我现在职业生涯的一个决定,而我现在正在为这个决定而加倍的努力付出. 我认为我还是有必要把这个比较重要的节点记录下来,我也是第一次在自己 ...
- 分布式的cap原理
由来 1998年的加州大学的计算机科学家 Eric Brewer 提出,分布式有三个指标. Consistency,Availability,Partition tolerance. 简称即为CAP. ...
- 通俗易懂,什么是.NET/.NET Framework/.NET Core/.Net Standard?
什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包 ...
- 随意看看AtomicInteger类和CAS
最近在读jdk源码,怎么说呢?感觉收获还行,比看框架源码舒服多了,一些以前就感觉很模糊的概念和一些类的用法也清楚了好多,举个很简单的例子,我在读Integer类的时候,发现了原来这个类自带缓存,看看如 ...
- Spring Boot 2 使用自定义配置
在application.yml定义配置后,可以使用Environment来读取配置,也可以使用@Value注解让业务代码去读取配置.如果属性较多,可以定义属性映射对象. 开发环境:IntelliJ ...