asp.net 强制性单一登陆现实

本文章使用asp.net内置membership作为登陆操作  关于配置membership   不用说明了 网上都有的首先建立一个login页面 随便放一个login控件和loginstatus控件aspx代码<body><form id="form1" runat="server"><div><asp:Login ID="Login1" runat="server" onloggedin="Login1_LoggedIn" onloggingin="Login1_LoggingIn"></asp:Login><asp:LoginStatus ID="LoginStatus1" runat="server" onloggingout="LoginStatus1_LoggingOut" /></div></form>
</body>cs代码 MembershipUser user;protected void Login1_LoggedIn(object sender, EventArgs e){if(user ==null)user = Membership.GetUser(User.Identity.Name);//获取登陆用户名的membershipuser实例
Guid newguid = Guid.NewGuid();//新建guid
HttpCookie  cookie=Response.Cookies[FormsAuthentication.FormsCookieName];//获取cookie
FormsAuthenticationTicket ft = FormsAuthentication.Decrypt(cookie.Value);//解密表单票FormsAuthenticationTicket newft = new FormsAuthenticationTicket(ft.Version, ft.Name, ft.IssueDate, ft.Expiration, ft.IsPersistent, newguid.ToString(), ft.CookiePath);//重新创建一个表单票 把生成guid加入userdata中user.Comment = "loginExpiration;" + ft.Expiration.ToString() + "|loginSessionID;" + newguid.ToString();//存储guid数据和过期时间Membership.UpdateUser(user);//更新用户数据Response.Cookies.Remove(FormsAuthentication.FormsCookieName);//删除已有相关formsName的cookieHttpCookie newCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(newft));//重新创建cookienewCookie.Domain = cookie.Domain;newCookie.Expires = cookie.Expires;newCookie.HttpOnly = cookie.HttpOnly;newCookie.Path = cookie.Path;newCookie.Secure = cookie.Secure;Response.Cookies.Add(newCookie);//输出cookie到客户端
}protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e){if (user == null){user = Membership.GetUser(Login1.UserName);}//禁止同一个会话再次登陆//禁止同一个会话再次登陆if (user != null){if (User.Identity.IsAuthenticated && user.UserName == User.Identity.Name){if (!string.IsNullOrEmpty(user.Comment) && user.Comment.Contains("loginExpiration")){string currentExpirationStr = user.Comment.Split("|".ToCharArray())[0];DateTime currentExpiration = DateTime.Parse(currentExpirationStr.Split(";".ToCharArray())[1]);if (currentExpiration < DateTime.Now){e.Cancel = true;Literal t = Login1.FindControl("FailureText") as Literal;t.Text = "你已经登陆了 !";}}}}}protected void LoginStatus1_LoggingOut(object sender, LoginCancelEventArgs e){//退出登陆  清空用户的comment数据MembershipUser mu = Membership.GetUser();mu.Comment = string.Empty;Membership.UpdateUser(mu);}然后 需要一个Httpmodule模块cs代码using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;namespace aspnetajaxtast
{public class FormsAuthsessionModule : IHttpModule{public void Dispose(){}public void Init(HttpApplication context){context.PostAuthorizeRequest += new EventHandler(context_PostAuthorizeRequest);}void context_PostAuthorizeRequest(object sender, EventArgs e){HttpApplication app = sender as HttpApplication;HttpContext c = app.Context;if (c.User.Identity.IsAuthenticated){FormsAuthenticationTicket ft = (c.User.Identity as FormsIdentity).Ticket;Guid g;if (ft.UserData != ""){g = new Guid(ft.UserData);}elseg = Guid.Empty;MembershipUser user = Membership.GetUser(c.User.Identity.Name);Guid currentSessionGuid;if (!string.IsNullOrEmpty(user.Comment)){string currentSessionStr = user.Comment.Split("|".ToCharArray())[1];currentSessionGuid = new Guid(currentSessionStr.Split(";".ToCharArray())[1]);}else{currentSessionGuid = Guid.Empty;}if (g != currentSessionGuid){FormsAuthentication.SignOut();//清空cookie登陆数据 需要重向url//自己自定义转到url的代码
}}}}
}web.config 需要配置httpmodule在<system.web><httpModules><add name="FormsAuthsessionModules" type="aspnetajaxtast.FormsAuthsessionModule"/></httpModules>这是vs测试或者iis7以下版本需要的如果在iis7  需要以下配置代码<system.webServer><modules  runAllManagedModulesForAllRequests="true"  ><add name="FormsAuthsessionModules" type="FormsAuthsessionModule"/></modules></system.webServer>测试需要两个浏览器就可以了  一个ie 一个ff可以当模拟两台电脑  如果你有两台电脑的话 也可以 

 

转载于:https://www.cnblogs.com/wifi/articles/2456516.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下MongoDB的安装及配置

https://blog.csdn.net/heshushun/article/details/77776706 一、先登录Mongodb官网https://www.mongodb.com/download-center#community 下载 安装包。32、64位的都行。 二、安装MongoDB 下载后的安装包&#xff1a; 安装比较简单&#xff0c;类似于普通QQ软件&#xff0c;中…

C#软件试用实现方式

//共享软件都有试用期 private void Form1_Load(object sender, System.EventArgs e){RegistryKey RootKey,RegKey; //项名为&#xff1a;HKEY_CURRENT_USERSoftwareRootKey Registry.CurrentUser.OpenSubKey ("Software",true);//打开子项&#xff1a;HKEY_CURRE…

CSS3实现多样的边框效果

CSS3实现多样的边框效果 原文:CSS3实现多样的边框效果半透明边框 实现效果&#xff1a; 实现代码&#xff1a; <div> 你能看到半透明的边框吗&#xff1f; </div>div {/* 关键代码 */border: 10px solid rgba(255,255,255,.5);background: white;background-clip: …

解决mysql乱码问题_解决Mysql乱码问题_MySQL

bitsCN.com折腾了半天&#xff0c;在网上找了半天&#xff0c;终于解决了Mysql的乱码问题&#xff01;系统是Fedora15&#xff0c;通过sudo yum install mysql-server mysql-client后&#xff0c;修改/etc/my.cnf在[mysqld]下添加default-character-setutf8&#xff0c;重启mys…

python+selenium_浏览器引擎

import configparser import os.path from selenium import webdriver from basework.logger import Logger logger Logger(logger"BrowserEngine").getlog() class BrowserEngine(object): """浏览器引擎类""" # 注意相对路径获取方…

perl的几个for循环判断

#计算1到100的和foreach $i (1..100){$sum$sum$i;}print $sum."\n";#九九表$j1;for $i (1..9){for $j ($j..$i){print "$j"."x"."$i".$j*$i." " ;}print "\n";}#取出1到100内包含7的数和能被7增除的数字for (1..1…

mysql 导入json_JsonToMysql(json导入mysql数据库工具)

JsonToMysql是款功能强大的json导入mysql数据库工具&#xff1b;用户在进行开发数据库、或者完成对相关的数据库维护的时候&#xff0c;经常需要将JSON的数据导入到数据库里面&#xff0c;如果没有专业的工具&#xff0c;就会对您的时间浪费&#xff0c;也会对工作的效率影响&a…

证监会:《证券期货业信息安全保障管理办法(征求意见稿) 》公开征求意见...

2012年4月20日&#xff0c;证监会正式对外公布了《证券期货业信息安全保障管理办法&#xff08;征求意见稿&#xff09;》&#xff0c;并公开征求意见。正式公布后将取代原来在2005年发布的暂行办法。 证券期货业信息安全保障管理办法&#xff08;征求意见稿&#xff09;第一章…

lvs

LVS 服务器集群 lamp概念&#xff1a;LVS&#xff1a;Linux Virtual Server Linux虚拟服务器。将整个服务器集群虚拟成一台服务器&#xff08;Linux虚拟服务器&#xff09;VIP:是lvs这台机器上&#xff0c;面向公网的IP地址。用于接受客户端的请求。LVS接收到客户端的请求…

使用mysql事件_MySQL事件的使用详解

在系统管理或者数据库管理中&#xff0c;经常要周期性的执行某一个命令或者SQL语句。这个时候就会用到mysql事件&#xff0c;使用这个功能必须保证是mysql的版本是5.1以上。1.首先要查看事件是否开启了&#xff0c;SHOW VARIABLES LIKE event_scheduler;SELECT event_scheduler…

iPad 如何创建UISplitViewController应用程序

原文摘自&#xff1a;UISplitViewController的使用。UISplitViewController在ipad中的使用ipad的屏幕比iphone大&#xff0c;所以在界面上&#xff0c;ipad比iphone多一个UISplitViewController&#xff0c;用来实现ipad在横屏时&#xff0c;分两栏显示所需要的界面&#xff0c…

mysql有没有num_mysql_num_rows()函数

php MySQL以下是代码部分&#xff1a;$username$_POST[“name”];$password$_POST[“password”];if($username&&$password){if(strpos($username,” “)!false)echo “用户名非法”;else{$conmysql_connect(“localhost”,”root”,”1″);mysql_select_db(“manage”…

oracle登陆

[oracleaa ~]$ rlwrap sqlplus <----登录oracle SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jun 10 18:44:06 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. Enter user-name: scott <-----用户名 Enter pass…

navicat怎么导出mysql_navicat怎么把数据库导出

Navicat是一套快速、可靠并价格相当便宜的数据库管理工具&#xff0c;专为简化数据库的管理及降低系统管理成本而设。下面我们就为大家介绍一下如何使用naviact把数据库导出。使用Navicat连接到mysql&#xff0c;然后选中你要导出的数据库&#xff0c;右键&#xff0c;选择转储…

五大常用算法总结

文章转自&#xff1a;https://blog.csdn.net/changyuanchn/article/details/51476281引言据说有人归纳了计算机的五大常用算法&#xff0c;它们是贪婪算法&#xff0c;动态规划算法&#xff0c;分治算法&#xff0c;回溯算法以及分支限界算法。虽然不知道为何要将这五个算法归为…

Windows 2003下网络负载平衡(负载均衡)的配置

网络负载平衡(网络负载均衡、NLB、集群)概述 首先&#xff0c;我们先了解下 Windows 2003 自带的 负载平衡(负载均衡)—— Network Load Balancing&#xff0c;简称NLB。NLB是一种集成高可用性&#xff0c;高可靠性和高扩展性的集群。它不但能实现均衡负载&#xff0c;而且还能…

前后端分离的思考与实践(二)

原文出处&#xff1a; 淘宝UED - Herman 基于前后端分离的模版探索 前言 在做前后端分离时&#xff0c;第一个关注到的问题就是 渲染&#xff0c;也就是 View 这个层面的工作。 在传统的开发模式中&#xff0c;浏览器端与服务器端是由不同的前后端两个团队开发&#xff0c;但…

mysql对大量数据查询花费时间_对于Mysql大量数据查询速度慢的问题

1.如果mysql数据量过大&#xff0c;当查询的时候耗时比较长&#xff0c;则会影响页面数据展示。给客户的直观反应的&#xff1a;点击了某个查询功能&#xff0c;结果等了差不多十几秒才反应出来&#xff0c;这样的体验感太差了。2.为了增加反应速度。一般来是建立索引&#xff…

读书笔记:《与爱因斯坦月球漫步》

买《与爱因斯坦月球漫步》这本书已经忘记了是谁的推荐了&#xff0c;已经记不住是什么时候加入到我的GTD阅读清单的&#xff0c;在去北京出差时带上了这本书&#xff0c;前4章介绍了许多故事和记忆的原理&#xff0c;快速翻到第5章开始阅读&#xff0c;随着作者一起开始记忆的练…

推自己的镜像到网易云

推送本地镜像 本文介绍如何将本地镜像推送至你的网易云私有镜像仓库&#xff0c;以便在网易云上部署容器或集群。 注&#xff1a;Docker 客户端版本要求 1.7 及以上。 1. 列出本地镜像 docker images 2. 后台启动容器&#xff0c;验证配置是否正确 docker run -d {镜像名或ID} …