转 asp.net 单用户登录经典解决方案
今天要做好一点的登陆框结果就想做个全局的判断是否用户所以找了一下文章
这里指的单点,泛指在WEB服务端,一个账户同一时刻只能存在一个票据!
大家开发中可能都碰到的一个问题,怎么使同一个用户,在同一时间内只允许登录一次。
很多人都会想到在数据库中用一个标识字段,登录进去置1,退出置0,登录时判断这个字段,如果是1就说明此用户在线,不允许登录,这个方案看似有效,但在实际使用中发现问题很多,比如,用户不是通过程序中的退出按纽退出,而是直接关闭IE,这样的话,下次登录时数据库里此用户还在线呢,这个用户就无法登录,当然也有一些办法可以解决这个问题:增加一个定时作业,定期复位那些长时间在线的用户,这样又会造成一些问题,如果这个用户实际上就是使用了这么长时间,那就是误杀。
通过多次实验,发现.net本身可以提供这种解决方案。步骤如下:
第一:建立global.asax文件, Session_End 事件中写入如下代码:
Hashtable h = (Hashtable)Application["online"];
if (h[Session.SessionID] != null)
h.Remove(Session.SessionID);
Application["online"] = h;
第二:修改web.config文件,在system.web 结点里面增加
<sessionState mode="InProc"></sessionState>
这个是为了使用global.asax中的session_end事件生效。
第三:页面的登录事件中,判断登录用户是否在服务端全局变量中存在,存在就不允许登录,不存在就创建。以下是实现过程,登录按纽的事件中调用。
private void isLogin()
{
Hashtable h = (Hashtable)Application["online"];
if (h == null)
{
h = new Hashtable();
}
/
相关文档:
public static void Purge(ref List<string>needToPurge)
{
for(int i=0;i<needToPurge.Count-1;i++)
&n ......
很早前就想做文件的解压、压缩、下载
了,不过一直没时间,现在项目做完了,今天弄了下。不过解压,压缩的方法还是看的网上的,嘻嘻~~不过我把它们综合了一下哦。呵呵~~
1.先要从网上下载一个icsharpcode.sharpziplib.dll
2.建立类AttachmentUnZip,内容如下:
using System;
using System.Data;
using System.Config ......
asp.net
http://topic.csdn.net/t/20060818/14/4959087.html
http://www.agrinei.com/gridviewhelper/gridviewhelper_en.htm
http://dotnet.aspx.cc/ShowDetail.aspx?id=149E5DD7-3B32-461e-ACC6-51D1652E6746
http://www.xueit.com/html/2009-08/21_4321_00.html
http://topic.csdn.net/t/20060429/10/4722766.html
......
1、基于ASP.NET技术的页面缓存
基于ASP.NET技术的页面缓存,通常有如下两种应用方式:
一、基于数据库触发(设置缓存依赖策略,当数据库中数据发生变化时,触发缓存失效;但微软提供的解决方案目前仅支持SQL Server,如果是ORACLE需要自己实现触发接口)。
二、基于文件依赖的策略(可以设置缓存依赖于文件中的具 ......
这里主要谈谈Application类中的事件
由前一篇文章可以知道,一旦出现了HttpContext类的一个实例,HttpRuntime类就会建立一个ASP.NET应用程序对象来完成该请求。一个应用程序包括HttpApplication类的一个实例。HttpApplication是一个global.asax派生的对象,处理所有被传递给某个虚文件夹得Http请求。一个正在 ......