• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

asp.net单一登录

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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 = -98 }));
            }
            else if (LoginService.CheckRepeatLogin(CurUser.UId))
            {
                context.Response.Write(JsonHelper.GetResult(false, "您的帐号在其他地方登录,您已经被踢出,请重新登录", new { rcode = -99 }));
            }
            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;
        }
    }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap