asp.net实现唯一登录 例子
2011-02-25 15:56
295 查看
js代码:
<script type="text/javascript">
String.prototype.trim = function() {
return this.replace(/(^\s+)|\s+$/g, "");
}
var x = 0;
function myRefresh() {
var httpRequest = new ActiveXObject("microsoft.xmlhttp");
httpRequest.open("GET", "sessionout.aspx", false);
httpRequest.send(null);
x++;
if (x < 2) //60次,也就是Session真正的过期时间是30分钟
{
setTimeout("myRefresh()", 30 * 1000); //30秒
}
}
myRefresh();
window.onbeforeunload = function() //author: meizz
{
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth - 20;
if (b && window.event.clientY < 0 || window.event.altKey) {
$.ajax(
{
type: "Post",
url: "SessionHandler.ashx",
success: function() {
}
})
}
}
</script>
webconfig sessionState设置:
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="1"/>
判断用户是否登录:
public static bool UserIsLogin(string userid)
{
bool isLogin = false;
ArrayList list = HttpContext.Current.Application.Get("GLOBAL_USER_LIST") as ArrayList;
if (list == null)
{
list = new ArrayList();
}
if (list.Contains(userid))
{
isLogin = true;
}
else
{
list.Add(userid);
HttpContext.Current.Application.Add("GLOBAL_USER_LIST", list);
}
return isLogin;
}
session 过期或用户退出时 从ArrayList 移除该用户:
void Session_End(object sender, EventArgs e)
{
//string url=HttpContext.Current.Request.Url.AbsolutePath.ToString();
//if .IndexOf("SysAdmin") == -1)
//{
string loginLogid = Convert.ToString(Session["loginLogid"]);
if (!string.IsNullOrEmpty(loginLogid))
{
erp_crm.BLL.crm_loginLog BllLoginLog = new erp_crm.BLL.crm_loginLog();
erp_crm.Model.crm_loginLog loginLog = BllLoginLog.GetModel(loginLogid);
loginLog.exitTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
BllLoginLog.Update(loginLog);
}
string strUserId = Convert.ToString(Session["userid"]);
ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayList;
if (strUserId != null && list != null)
{
list.Remove(strUserId);
Application.Add("GLOBAL_USER_LIST", list);
}
// Response.Redirect("login.aspx");
//}
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。
}
安全退出: Session.Abandon();
参考:http://www.cnblogs.com/myaspnet/archive/2010/11/03/1867703.html
<script type="text/javascript">
String.prototype.trim = function() {
return this.replace(/(^\s+)|\s+$/g, "");
}
var x = 0;
function myRefresh() {
var httpRequest = new ActiveXObject("microsoft.xmlhttp");
httpRequest.open("GET", "sessionout.aspx", false);
httpRequest.send(null);
x++;
if (x < 2) //60次,也就是Session真正的过期时间是30分钟
{
setTimeout("myRefresh()", 30 * 1000); //30秒
}
}
myRefresh();
window.onbeforeunload = function() //author: meizz
{
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth - 20;
if (b && window.event.clientY < 0 || window.event.altKey) {
$.ajax(
{
type: "Post",
url: "SessionHandler.ashx",
success: function() {
}
})
}
}
</script>
webconfig sessionState设置:
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="1"/>
判断用户是否登录:
public static bool UserIsLogin(string userid)
{
bool isLogin = false;
ArrayList list = HttpContext.Current.Application.Get("GLOBAL_USER_LIST") as ArrayList;
if (list == null)
{
list = new ArrayList();
}
if (list.Contains(userid))
{
isLogin = true;
}
else
{
list.Add(userid);
HttpContext.Current.Application.Add("GLOBAL_USER_LIST", list);
}
return isLogin;
}
session 过期或用户退出时 从ArrayList 移除该用户:
void Session_End(object sender, EventArgs e)
{
//string url=HttpContext.Current.Request.Url.AbsolutePath.ToString();
//if .IndexOf("SysAdmin") == -1)
//{
string loginLogid = Convert.ToString(Session["loginLogid"]);
if (!string.IsNullOrEmpty(loginLogid))
{
erp_crm.BLL.crm_loginLog BllLoginLog = new erp_crm.BLL.crm_loginLog();
erp_crm.Model.crm_loginLog loginLog = BllLoginLog.GetModel(loginLogid);
loginLog.exitTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
BllLoginLog.Update(loginLog);
}
string strUserId = Convert.ToString(Session["userid"]);
ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayList;
if (strUserId != null && list != null)
{
list.Remove(strUserId);
Application.Add("GLOBAL_USER_LIST", list);
}
// Response.Redirect("login.aspx");
//}
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。
}
安全退出: Session.Abandon();
参考:http://www.cnblogs.com/myaspnet/archive/2010/11/03/1867703.html
相关文章推荐
- 技术贴:asp.net实现唯一账户在线 禁止同一帐号同时在线 asp.net实现您的帐号在别处登录,您已被迫下线!
- ASP.NET 安全认证(三)—— 用Form 表单认证实现单点登录(Single Sign On)
- ASP.NET_登录例子
- Asp.net 实现只能允许一个账号同时只能在一个地方登录
- Asp.net mvc验证用户登录之Forms实现-转
- ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录[原创]_实用技巧_脚本之家
- 一步一步学asp.net Ajax登录设计实现解析
- 晚上无聊象征性收取了网友100元辛苦费,实现支持多语言功能的XML语言包版的C#的ASP.NET多语言支持例子程序
- ASP.NET 安全认证(四)——巧妙实现 Form 表单认证跨站点、跨服务器的单点登录(Single Sign On)
- 【ASP.NET】 实现 单点登录
- ASP.NET内置票据认证(实现登录权限的判定)
- ASP.net 实现禁止用户重复登录
- ASP.net实现单点登录
- ASP.NET MVC使用中转站方式获取code实现微信登录,分享功能
- 在ASP.NET登录页面中如何实现文本框焦点自动跳转及通过回车键提交表单
- ASP.NET中如何实现FORM认证登录
- ASP.NET 安全认证(四)——巧妙实现 Form 表单认证跨站点、跨服务器的单点登录(Single Sign On)
- ASP.NET 框架 之HttpModule 例程:实现登录控制和权限控制
- 在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法