Technorati 标签: asp.net,cache

由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析。

实现思路

利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。

查看示例

SingleLogin.aspx代码

<%@ Page language="c#" Codebehind="SingleLogin.aspx.cs" AutoEventWireup="false"
Inherits="eMeng.Exam.SingleLogin" %>
<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html> <head> <title>单点登录测试</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta http-equiv="Author" content="孟子E章"> <meta http-equiv="WebSite" content="http://dotnet.aspx.cc/"> <style> H3 { FONT: 17px 宋体 } INPUT { FONT: 12px 宋体 } SPAN { FONT: 12px 宋体 } P { FONT: 12px 宋体 } H4 { FONT: 12px 宋体 } </style> </head> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <div align="center"> <h3>单点登录测试</h3> <p>用户名称:<asp:textbox id="UserName" runat="server"></asp:textbox></p> <p>用户密码:<asp:textbox id="PassWord" runat="server" TextMode="Password"></asp:textbox></p> <p><asp:button id="Login" runat="server" Text=" 登  录 "></asp:button></p> <p><asp:label id="Msg" runat="server"></asp:label></p> </div> </form> </body>
</html> SingleLogin.aspx.cs代码 using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace eMeng.Exam
{
/// <summary>
/// SingleLogin 的摘要说明。
/// 实现单点登录
/// </summary>
public class SingleLogin : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox UserName;
protected System.Web.UI.WebControls.TextBox PassWord;
protected System.Web.UI.WebControls.Label Msg;
protected System.Web.UI.WebControls.Button Login;
private void Page_Load(object sender, System.EventArgs e)
{
// 实际例子可访问:
// http://dotnet.aspx.cc/Exam/SingleLogin.aspx
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Login.Click += new System.EventHandler(this.Login_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Login_Click(object sender, System.EventArgs e)
{
// 作为唯一标识的Key,应该是唯一的,这可根据需要自己设定规则。
// 做为测试,这里用用户名和密码的组合来做标识;也不进行其它的错误检查。
// 生成Key
string sKey = UserName.Text + "_" + PassWord.Text;
// 得到Cache中的给定Key的值
string sUser = Convert.ToString(Cache[sKey]);
// 检查是否存在
if (sUser == null || sUser == String.Empty)
{
// Cache中没有该Key的项目,表名用户没有登录,或者已经登录超时
// 注意下面使用的TimeSpan构造函数重载版本的方法,是进行是否登录判断的关键。
TimeSpan SessTimeOut = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);
HttpContext.Current.Cache.Insert(sKey,sKey,null,DateTime.MaxValue,SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable,null);
Session["User"] = sKey;
// 首次登录,您可以做您想做的工作了。
Msg.Text="
<h4 style='color:red'>嗨!欢迎您访问<a href='http://dotnet.aspx.cc/'>【孟宪会之精彩世界】";
Msg.Text += "</a>,祝您浏览愉快!:)</h4>
";
}
else
{
// 在 Cache 中发现该用户的记录,表名已经登录过,禁止再次登录
Msg.Text="
<h4 style='color:red'>抱歉,您好像已经登录了呀:-(</h4>
";
return;
}
}
}
}

转自:

http://www.cnblogs.com/niit007/archive/2006/10/09/524474.aspx

转载于:https://www.cnblogs.com/lucienbao/archive/2010/04/02/usingcache.html

在ASP.NET 中实现单用户登录(利用Cache, 将用户信息保存在服务器缓存中)[转]相关推荐

  1. 【转载】SQL Server 2008 中新建用户登录并指定该用户的数据库

    提要:我在 SQL Server 中新建用户登录时,出现了三种错误,错误代码分别是 18456.15128.4064 -----------------------------------正 文 -- ...

  2. 单一用户登录,即当前用户登录后要踢出前一个登录,即做出踢人效果,如何实现?

    单一用户登录,即当前用户登录后要踢出前一个登录,即做出踢人效果,如何实现? 一般情况下,用户登录,有两种方式:cookie方式,session方式.一般情况下,session方式是使用最多的. 一.关 ...

  3. ad域服务器用户登录限制,AD域监控用户登录, 活动目录监控用户, AD登录历史审核...

    实时监控用户登录操作 用户登录到其域计算机是在任何企业都会发生的日常活动.一开始,这看起来可能是一个简单的Active Directory事件,但分配有不同角色的管理员可将这个宝贵的数据用于各种审核. ...

  4. root用户登录mysql后新建用户提示1045错误

    执行以下命令查看root权限 show grants for 'root'@'localhost'; 如果没有显示with grant option,说明是root没有拥有新建授权用户的权限(为什么会 ...

  5. 简单的java信息显示_JSP实现简单的用户登录并显示出用户信息的方法

    本文实例讲述了jsp实现简单的用户登录并显示出用户信息的方法.分享给大家供大家参考.具体实现方法如下: login.jsp string path = request.getcontextpath() ...

  6. php后台登录,简单的PHP数据后台实现用户登录,php后台用户登录

    简单的PHP数据后台实现用户登录,php后台用户登录 最近在写iOS一个小项目,用到了登录,所以用SAE搭了个简易的纯数据后台.PHP语句入门很简单,但是结合SQL就有点难度了.(代码都是SAE平台运 ...

  7. VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)

    注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.比如我们打开一个记事本,调整其窗口大小,使用 ...

  8. C语言编程>第二十六周 ⑥ 请补充fun函数,该函数的功能是:按 “0”到 “9”统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。

    例题:请补充fun函数,该函数的功能是:按 "0"到 "9"统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中.注意:不能使用字符串库函数. ...

  9. linux系统中存放用户账号信息的文件是,信息安全技术题库:Linux系统中,用户登录密码的hash是存放在()文件中的。...

    相关题目与解析 目录数据库是指(46).A.操作系统中外存文件信息的目录文件B.用来存放用户账号.密码.组账号等系统 Linux系统下登录过程中,如已在LILO引导中加入了安全机制:restricte ...

最新文章

  1. python numpy转字符串
  2. python timer使用-python中timer定时器常用的两种实现方法
  3. 易语言单窗口单ip软件源码_好人多窗口同步器:多台电脑同步视频演示
  4. JavaScript Notes
  5. Boost:由内部绑定的值返回的智能指针的测试程序
  6. 【STM32】USART相关函数和类型
  7. 如果给你机会,阿里巴巴的中层职位和马云的专属司机,你怎么选?
  8. 手写及场景文字分析与识别的一些新尝试
  9. Mr.J--jQuery效果总结
  10. python相机拍照显示_Python无法从Raspberry Pi相机以最高分辨率拍照
  11. MaxEnt: 最大熵模型(Maximum Entropy Models)(二)
  12. ***YZJ的牛肉干***
  13. LaTeX插入参考文献手把手教学 | BibTeX教程
  14. 程序员如何规划自己的职业生涯
  15. STM32的IAP在线升级
  16. VproC#混合编程,加载图片
  17. 【Unity】AvProVideo 实现当前视频播放完毕自动加载下一视频
  18. HDU 6438 Buy and Resell
  19. 纺织品行业——瑞士蓝标Bluesign认证
  20. itext pdf 加页眉和页脚加页数(二)

热门文章

  1. JavaScript实现的List(集合)类
  2. Spring 注解方式实现 事务管理
  3. BlueHost Gzip优化JS和CSS传输
  4. typescript设置默认值_TypeScript输入参数的默认值一例,以及对应生成的JavaScript代码分析...
  5. rocketmq支持最大消息_分布式消息引擎Apache RocketMQ最佳实践
  6. tab键怎么关闭_C/C++应用无障碍化如何支持Tab键浏览
  7. Redis 集群密码配置
  8. 开源代码库_3个开源代码库来处理MARC格式的记录
  9. Java 之单元测试
  10. HTML pre元素