asp.net 判断重复登录

zxhxiaoyi51 2014-02-21 01:18:26
可是还能登录进去,是不是因为打开一个新窗口就会重新创建一个新的Session啊”
确实是这样的。
网站都是B/S结构的。就是浏览器服务器模式。
当你打开一个浏览器登录到网站的时候。服务器会给你一个session这个session的id是唯一。也就是说别人打开一个同样网址的网页时,他的session和你的session是不同的对象。
当你在打开一个浏览器的时候也是不一样的。他针对的是浏览器而不是ip地址。

判断是否已经登录。可以使用application保存用户状态,但是会占用内存。建议使用数据库来保存。
在数据库中建一张表。保存最近一次登录时session的id 和他是什么时候登录的。
当管理员想查他现在是否在线的时候,查处他session的id 然后看看这个session现在是否已经被回收,也就是是否为null。 因为当用户超过规定时间没有提交请求的时候,系统就会回收这个session(一般默认好像是30分钟左右)。所以如果session为空就说明不在线。如果不为空那么再判断一下你保存在这个session中的用户是否与用户帐号相符。如果也相符就证明。这个用户半个小时前还再线。如果没有特殊要求,就可以认为用户现在在线。
再用登录时间和现在的时间做一下差。就能得到他在线多长时间了。

问题是 如果不为空那么再判断一下你保存在这个session中的用户是否与用户帐号相符。如果也相符就证明???? 这个是怎么判断,不明白,求指教
...全文
573 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 21 楼 diaodiaop 的回复:
什么session啥的都不靠谱啊. ... 这个问题 使用推送就可以搞定了.. 或者实时更新数据库...
实时更新- -。数据库一直打开着嘛。
by_封爱 2014-07-05
  • 打赏
  • 举报
回复
什么session啥的都不靠谱啊. ... 这个问题 使用推送就可以搞定了.. 或者实时更新数据库...
zxhxiaoyi51 2014-07-05
  • 打赏
  • 举报
回复
24小时清空一次比较好?
zxhxiaoyi51 2014-07-05
  • 打赏
  • 举报
回复
好像没有好的方式似的
祥子爱游戏 2014-07-05
  • 打赏
  • 举报
回复
SSO。 数据库临时表。 session。 cookies。 百度是搜来的
xiye_jfb 2014-03-24
  • 打赏
  • 举报
回复
[quote=引用 15 楼 sp1234_maJia 的回复:]
private static DateTime? 上一次清理时间;
[quote] 这个问号是什么意思?
天殇月痕 2014-03-24
  • 打赏
  • 举报
回复
Application针对整个应用程序的!可以用这个判断
没来 2014-03-23
  • 打赏
  • 举报
回复
如果使用.net中角色类,用MembershipUser.IsOnline也可以,但有个问题是用户下线后,并不是实时显示。这是Session的问题吗?
sp1234_maJia 2014-03-22
  • 打赏
  • 举报
回复
改一下
private static DateTime? 上一次清理时间;

public static void 清理过期会话记录()
{
    if (上一次清理时间.HasValue && DateTime.Now.Subtract(上一次清理时间.Value) > TimeSpan.FromHours(200))
    {
        上一次清理时间 = DateTime.Now;
        var sql = "delete from [会话记录] where [最后访问时间]<'" + DateTime.Now.AddHours(-12).ToString("yyyy-MM-dd HH:mm:ss") + "'";
        Execute(sql);
        var sid= HttpContext.Current.Session.SessionID;
        sql= "if exists(select * from [会话记录] where SessionID='"+ sid +
            "') update [最后访问时间]=getdate() else insert ......";  //这里自己补充 
        Execute(sql);
    }
}
这里,每隔200分钟才清理一下,而且一次仅仅删除12小时以前的记录。你可以自己调整这两个参数
  • 打赏
  • 举报
回复
引用 6 楼 zxhxiaoyi51 的回复:
那我这个 数据库的值不是一直存在吗? 什么时候删除呢 你判断了 不删除咋整
这通常是在处理(任意一个)客户端对你的程序的请求时,调用一下。例如也许可以写
private static DateTime? 上一次清理时间;

public static void 清理过期会话记录()
{
    if (上一次清理时间.HasValue && DateTime.Now.Subtract(上一次清理时间.Value) > TimeSpan.FromHours(12))
    {
        var sql = "delete from [会话记录] where [最后访问时间]<'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'";
        Execute(sql);
        var sid= HttpContext.Current.Session.SessionID;
        sql= "if exists(select * from [会话记录] where SessionID='"+ sid +
            "') update [最后访问时间]=getdate() else insert ......";  //这里自己补充 
        Execute(sql);
        上一次清理时间 = DateTime.Now;
    }
}
  • 打赏
  • 举报
回复
简单说,假设你在服务器进程里保存,那么可以定义
public static Dictionary<string,MyUserInfo> MySessions= new Dictionary<string,MyUserInfo>();
这样的一个静态变量,用来保存没一个sessionId(string类型)对应的用户运行信息(自定义的MyUserInfo类型,例如其属性可以包括“用户名、用户所在部门、用户授权、购物车、最后一次访问时间.....”等等信息。 但是要知道,asp.net进程经常会“丢失”所有的内存数据,一切都会自动清空了。因此其实上述这种设计看上去很简单,其实在真实的生产环境中不成立。 因此你可以以数据库保存信息为根据。首先把这里的MySessions数据定义到关系数据库中,例如有“SessionID,用户名,部门名,授权集合ID号,购物车ID号,最后一次访问时间.....”等字段。然后就可以轻松地开始你的程序设计。 并且你的程序可以每隔一段时间自动把那些超时的数据记录(例如“最后一次访问时间”距离当前时间超过2分钟、或者超过12小时的)删除掉。 然后当上线之前,把有关调用数据库操作的BLL层代码,进行性能优化。也就是当查询时,可以是先从数据缓冲(例如 System.Caching.Cache 类型)系统中读取,如果找不到才真正读取数据库。不过数据缓冲系统只是用来优化的,丝毫也撼动不了根基。根基就是要使用数据库来管理这些看似临时的数据。
  • 打赏
  • 举报
回复
引用 楼主 zxhxiaoyi51 的回复:
当管理员想查他现在是否在线的时候,查处他session的id 然后看看这个session现在是否已经被回收,也就是是否为null。 因为当用户超过规定时间没有提交请求的时候,系统就会回收这个session(一般默认好像是30分钟左右)。所以如果session为空就说明不在线。如果不为空那么再判断一下你保存在这个session中的用户是否与用户帐号相符。如果也相符就证明。这个用户半个小时前还再线。如果没有特殊要求,就可以认为用户现在在线。
不知道你从哪里抄来的这段话。这是瞎说的。 管理员所用的asp.net程序也不可能去随便判断别人的Session是否为null。所以后边的全都是谎话。
啾啾我 2014-03-22
  • 打赏
  • 举报
回复
一般用户在线都是使用Application 感觉块楼主想的有点复杂了。
zxhxiaoyi51 2014-03-22
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。。求大神
zxhxiaoyi51 2014-02-22
  • 打赏
  • 举报
回复
还是没有解决 感觉
zxhxiaoyi51 2014-02-21
  • 打赏
  • 举报
回复
Session过期的时候删除就是? 有具体代码么。。。。 过期有事件吗? 有具体代码么 感觉还是有点不完美是的
  • 打赏
  • 举报
回复
引用 6 楼 zxhxiaoyi51 的回复:
那我这个 数据库的值不是一直存在吗? 什么时候删除呢 你判断了 不删除咋整
Session过期的时候删除就是
zxhxiaoyi51 2014-02-21
  • 打赏
  • 举报
回复
那我这个 数据库的值不是一直存在吗? 什么时候删除呢 你判断了 不删除咋整
cchuaruxue 2014-02-21
  • 打赏
  • 举报
回复
就是需要判断的用户ID和session中保存的用户ID进行比较啊,这有什么不能懂的
一只鬼 2014-02-21
  • 打赏
  • 举报
回复
存数据库里比较好吧
加载更多回复(3)

62,074

社区成员

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

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

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

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