asp.net 解决IE8 串session 问题。

chenjianyong94 2011-06-09 05:45:50
asp.net 在一台电脑 打开某个页面,比如 登录页面。。。。。当第1个人登录成功后。。。第2个人再在这台电脑登录。。。

就让他登录不进去。。。。


这样就1个账号登录。。。串session 问题得以解决。
...全文
324 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenjianyong94 2011-06-16
  • 打赏
  • 举报
回复
坐等高手解答。
tangchengn 2011-06-10
  • 打赏
  • 举报
回复
对了,你到底是想控制一个账户只能在一个地方被登录,还是解决用在一台电脑上打开2个ie访问,用的2个用户名,而点来点去最后界面变成同一个账户的界面?我上面啰嗦的是解决同一个账户不能在2个地方被登录。QQ:645279864
tangchengn 2011-06-10
  • 打赏
  • 举报
回复
我碰到你的遇到的问题,当时真的是很棘手,不过现在解决了希望能帮到你。首先,上面几楼说的方法我都有试过用Cookie保存,和用session一样的,同样会出现一样的情况。如果用一个字段来标识登录状态1或0,非法退出断电情况都会导致更新不了字段,从而锁死用户。
在登录页面,一切判断做好后,判断session["user"]==null;然后贴上代码 ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayList;
if (list == null)
{
list = new ArrayList();
}
for (int i = 0; i < list.Count; i++)
{
if (user.UserId == (list[i] as string))
{
//已经登录了,提示错误信息
Page.RegisterStartupScript("aa", "<script>alert('您无法登录,该用户名已经有人登录了!')</script>");
return;

}
}检查你的用户是否登录了。
然后在退出的时候去移除这个用户,贴上代码(不知道你的项目退出怎么设计的,如果有专门的安全退出按钮就调用这个方法):
public void clearsession()
{
if(user != null)
{
string strUserId = user.UserId;
ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayList;
if (strUserId != null && list != null)
{
list.Remove(strUserId);
Application.Add("GLOBAL_USER_LIST", list);

}
}
}
然后再来扑捉直接关闭浏览器,任务栏下面的右键关闭:(不知道你采用的是什么布局)在你的母版页或是框架主页上面贴上js代码:
function window.onbeforeunload()
{
//用户点击浏览器右上角关闭按钮或是按alt+F4关闭

var n=window.event.screenX-window.screenLeft;
var b=n>document.documentElement.scrollWidth-20;

if(b&&window.event.clientY<0||window.event.altKey) // alert("点关闭按钮"); window.event.returnValue="确定要退出本页吗?";
{
InsertSQL();
}

//用户点击任务栏,右键关闭。s或是按alt+F4关闭
else if(event.clientY > document.body.clientHeight || event.altKey)
{
InsertSQL();
}
//其他情况为刷新
else
{
}

}
function InsertSQL()//(ajax)
{
var Http = new ActiveXObject("Microsoft.XMLHTTP");
Http.open("GET","InsertExitLog.aspx",false); //检查Session失效的页面
Http.send(null);
var str = Http.responseText;//执行ASPX后的返回结果
}
而InsertExitLog.aspx这个页面里面的代码,也同样是上面clearsession()
这个方法,不过InsertExitLog.aspx的源里面的代码只要<%@ Page Language="C#" AutoEventWireup="true" CodeFile="InsertExitLog.aspx.cs" Inherits="InsertExitLog" %>
这个即可,其他的标签都删掉。
如果是怕断电,用户没有通过上面的方法移除,那么要等到session过期才可以,你可以创建一个Global.asax文件(在选中网站添加一个“全局应用程序类”)里面的代码只要到void Session_End(object sender, EventArgs e) 这个里面加上clearsession()
这个方法里面的方法
再到web.config里面</pages>这个下面加入 <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="1"/>表示当非法退出过1分钟(实际差不多是快2分钟)后自动清除刚刚的用户。同时为了保证你的session在1分钟内不操作而不被失效,就需要在你的ie里面设置一下,Internet选项---常规---设置---在检查所访问网页下选择第一个“每次访问网页时”。我的方法是这个,如果你觉得麻烦可以另寻其他方法。
ZCB888 2011-06-10
  • 打赏
  • 举报
回复
可以用javascript控制啊, 这个东西一般都保存在Cookie中,也有少部分保存在数据库中的!
highpr 2011-06-10
  • 打赏
  • 举报
回复
用javascript控制可以吗?
z_f_p 2011-06-10
  • 打赏
  • 举报
回复
关注!
sfxdawn 2011-06-10
  • 打赏
  • 举报
回复
用cookie来保存登录信息在客户端吧,不怕非法断电哦。
心灵彩虹 2011-06-10
  • 打赏
  • 举报
回复

HttpCookie objCookie = new HttpCookie("SysUser"); //定义cookie对象以及名为Info的项
objCookie.Domain = ".xxx.com"; //定义cookie对象Domain,作用域
DateTime dt = DateTime.Now; //定义时间对象
TimeSpan ts = new TimeSpan(1, 0, 0, 0); //cookie有效作用时间,具体查msdn
objCookie.Expires = dt.Add(ts); //添加作用时间
objCookie.Values.Add("Account", returnModel.SU_AccountID); //增加属性
objCookie.Values.Add("UserID", returnModel.SU_ID.ToString());


心灵彩虹 2011-06-10
  • 打赏
  • 举报
回复
用cookie吧,不怕非法断电哦。
chenjianyong94 2011-06-10
  • 打赏
  • 举报
回复
要是用锁的话,万一断电或 用户非法关闭系统 怎么执行代码呢???请高手指教
kkbac 2011-06-09
  • 打赏
  • 举报
回复
cookie保存客户端信息,之后判断.
子夜__ 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 chenjianyong94 的回复:]
asp.net 在一台电脑 打开某个页面,比如 登录页面。。。。。当第1个人登录成功后。。。第2个人再在这台电脑登录。。。

就让他登录不进去。。。。


这样就1个账号登录。。。串session 问题得以解决。
[/Quote]
用锁?

不用session也可以

建立一张表一个字段

每次登陆的时候都检测这个字段

第一个用户登陆进去把该字段改为1 退出改为0

下一个用户登陆的时候检查这个字段 如果为1就登陆不了 0就可以登陆

登陆进去在把字段改为1。。。。
叶子 2011-06-09
  • 打赏
  • 举报
回复
登录的时候,判断一下session中没有用户名,有的话就提示请注销后再登录。
xfreyes 2011-06-09
  • 打赏
  • 举报
回复
这个没法判断吧,倒是可以通过cookie来实现
renyiqiu 2011-06-09
  • 打赏
  • 举报
回复
帮LZ顶一下
xuexiaodong2009 2011-06-09
  • 打赏
  • 举报
回复
在后台添加IP的判断
chenjianyong94 2011-06-09
  • 打赏
  • 举报
回复
请高手指教
zhulong1111 2011-06-09
  • 打赏
  • 举报
回复
木懂意思。。。估计不行。。你怎么判断第一个人登录成功没啊? 不同浏览器呢?
ahhisoft 2011-06-09
  • 打赏
  • 举报
回复
IE8没有串session吧?标签页是共享进程的,打开新IE窗口就清Session了。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧