JBTALKS.CC

标题: asp.net log in判断user account是否正在使用当中 [打印本页]

作者: TmXiaOChAo    时间: 2012-4-14 02:46 PM
标题: asp.net log in判断user account是否正在使用当中
asp.net 如果要detect某一个account是否正在使用着, 如果有就不给进入. 这个要怎样写?
作者: 宅男-兜着走    时间: 2012-4-14 03:51 PM
上次看过就是说, 登入进来后, 写入database, user_id, 和, ip_address, 一组unique key或timestamp unique key, 如果另外台电脑登入的话, 比如说user_id(相同) session key(不同)
那么就强制他logout, 不然就是给他错误讯息 就行了。

至于ip 地址怎么做就看你了。
作者: weeming21    时间: 2012-4-14 05:24 PM
这样写的话,一定要有timeout功能,不然登陆后没有登出就直接关browser,就永远不能登陆了
作者: 宅男-兜着走    时间: 2012-4-14 05:50 PM
回复 3# weeming21


    是这么说没错。 这个是从某个framework 那里看到的。
   
   高手有什么指教?
作者: Super-Tomato    时间: 2012-4-14 06:05 PM
1. 設定 timeout 並配合使用 cronjob
2. socket
作者: TmXiaOChAo    时间: 2012-4-14 07:35 PM
回复 2# 宅男-兜着走


    我之前有考虑过你写过的这个, 可是就考虑到如果user电脑突然shut off或者black out.. db 那里就改不到 user就永远进不去了..
作者: TmXiaOChAo    时间: 2012-4-14 07:38 PM
回复 2# 宅男-兜着走


    大大如果不要设定timeout功能还有其他的办法吗? 因为可能某些会待在那个网站比较长的时间....如果set一个timeout给他好像怪怪的...
作者: TmXiaOChAo    时间: 2012-4-14 07:42 PM
回复 5# Super-Tomato


    大大能请问下有什么方法是能知道知道那个user是否在线的吗? 上网看到很多都推荐用httpcontext.current.user.isauthenticated可是我怎样写都写不到,头有点快要爆了 @@
作者: Super-Tomato    时间: 2012-4-14 08:24 PM
回复  Super-Tomato


    大大能请问下有什么方法是能知道知道那个user是否在线的吗? 上网看到很多都 ...
TmXiaOChAo 发表于 2012-4-14 07:42 PM



抱歉, 我沒用微軟的編程產品, 所以沒辦法告訴你怎麼用, 但從 msdn 來看應該是用於檢查個人目前在線情況是否得到認證而不是檢查在線用戶
作者: TmXiaOChAo    时间: 2012-4-14 09:02 PM
回复 9# Super-Tomato


    没关系, 还是要谢谢大大的教导
作者: 宅男-兜着走    时间: 2012-4-14 09:19 PM
确实, 我不觉得会有个完全好的做法。
我不知道socket 能不能帮到你。

socket 能知道客户端是不是还connect 着。
但是我还没在web 用过。


作者: TmXiaOChAo    时间: 2012-4-14 09:26 PM
回复 11# 宅男-兜着走


    那你之前是在winform用过吗? 还是哪里呢? 有没有列子可以供我参考呢?
作者: 宅男-兜着走    时间: 2012-4-14 09:48 PM
回复  宅男-兜着走


    那你之前是在winform用过吗? 还是哪里呢? 有没有列子可以供我参考呢?
TmXiaOChAo 发表于 2012-4-14 09:26 PM



    WPF winform 咯, 然后 socket server compile 成另外个 exe。

   http://www.codeproject.com/Artic ... amming-in-NET-using
   那个时候我的写法跟这个差不多。
   
   我刚才试了 php 的socket, 好像是要访问了那个页面, 不然就是 command line 过去才可以 listen incoming connection。 没理想中的好。
作者: TmXiaOChAo    时间: 2012-4-14 10:24 PM
回复 13# 宅男-兜着走


    谢谢大大, 会去参考这方面的东西 ^ ^
作者: weeming21    时间: 2012-4-14 10:44 PM
我大概说下我的想法:
1. 当用户登录是,user db 里记录用户的cookie session和timeout时间
2. 当用户logoff时,就把cookie session和timeout清楚掉
3. 当另外一个用户登录时,如果user db里的cookie session和timeout时间还没有过,那么就不允许登陆

以上3点又有几个问题存在,那就是
问题1:为什么不能使用ip,而是要使用cookie session?
答:原因是或许用户是在LAN上网,如果使用ip, 同一个LAN不同电脑尝试登陆的话就crash了。

问题2:有些用户使用时间很长,那么timeout怎么办?
解决方法:在每页都写一个function,当用户有使用,就延长timeout时间,也就是idle太久才会timeout

问题3:假设某位用户internet disconnect或没有logout该怎么办?
解决方法:当有用户登录时,先处理user db里面的timeout, 如果Timeout时间过了,那么就把该timeout 和 session删除

==================================
还有另外一种方法,不过不鼓励使用,也就是在Admin page的代码里写一个Script,每一分钟在后台自动提交一个i m active的数据通知服务器,那么只要用户没有把browser关掉,就会一直是login状态,其它用户就永远不能登陆
作者: 宅男-兜着走    时间: 2012-4-15 12:39 AM
我大概说下我的想法:
1. 当用户登录是,user db 里记录用户的cookie session和timeout时间
2. 当用户log ...
weeming21 发表于 2012-4-14 10:44 PM

问题3:假设某位用户internet disconnect或没有logout该怎么办?
解决方法:当有用户登录时,先处理user db里面的timeout, 如果Timeout时间过了,那么就把该timeout 和 session删除


这个要怎么拿捏? 设置 5 分钟会太短还是太多?

或者是把 ID 放在 cookie 里面。
如果关掉browser 清空cookie 呢?
不知道 js 能不能做到这点。
作者: TmXiaOChAo    时间: 2012-4-15 12:57 AM
回复 15# weeming21

大大有一个问题想请教你, 如果照你说的set 一个time out给客户, 而我set的,或者在每个page extend的timeout时间是idle是15分钟, 但是如果我一extend了15分钟,user就刚好断线了,那user不是要等15分钟过后才可以登入了..
作者: TmXiaOChAo    时间: 2012-4-15 12:58 AM
回复 16# 宅男-兜着走


    maybank的是设置几秒大大你知道吗?
作者: weeming21    时间: 2012-4-15 01:20 AM
本帖最后由 weeming21 于 2012-4-15 01:27 AM 编辑
这个要怎么拿捏? 设置 5 分钟会太短还是太多?

或者是把 ID 放在 cookie 里面。
如果关掉brow ...
宅男-兜着走 发表于 2012-4-15 12:39 AM


又或者双管齐下:
1. 如我所说,用户有action就延长timeout 30分钟
2. 同时client side也写个js,固定每分钟或更长时间向服务器说I m still alive.

只要出现以下其中一个condition就归纳为logoff:
1. 30分钟没有action
2. 没有接收到alive signal超过特定时间
作者: weeming21    时间: 2012-4-15 01:25 AM
回复  weeming21

大大有一个问题想请教你, 如果照你说的set 一个time out给客户, 而我set的,或者在每个 ...
TmXiaOChAo 发表于 2012-4-15 12:57 AM


如果是同一个user, 断线后应该不受影响吧
因为是验证cookie session而不是ip,一直换ip也不影响啊。除非是换电脑或browser的cookie不见去
作者: 宅男-兜着走    时间: 2012-4-15 01:37 AM
回复 19# weeming21


    个人觉得没必要写 个js 过去跟server 沟通。 普通的, page 的 app page refresh 才检查就好。
作者: 宅男-兜着走    时间: 2012-4-15 01:48 AM
回复 18# TmXiaOChAo


    如 weeming 所说的。半小时左右。
    或者,
    没动作, 或没refresh。
    server 检查到timeout 那么他就logout 了。
   
    下次进来给他个新的sess id。
     

    我突然间想到, 不知道合理不合理
    login 进来, cookie 进去
    我有动作, 检查到我的cookie id 跟表内的符合, 我能继续
    我30分钟没动作, page refresh 检查到 timeout kick, 表就更新。
    我有动作, 但是另外台电脑login, 我记录另外台电脑的sess 进去表内, 旧的那台refresh 了检查到cookie id 不同, 被kick。
    我关掉了 browser, cookies 还有 10 分钟左右的时间, 我还能继续用, 如果时间超过了, 我必须从新登入, cookie 更新。


    应该没问题了吧?
   如果你要做到给力点就在 client 做个 ajax, 然后每隔 1 分钟就 send cookies 去server 检查一次, 如果超过了就kick, 不然就modal 出来block(类似google doc)。
作者: 宅男-兜着走    时间: 2012-4-15 01:50 AM
回复 18# TmXiaOChAo


    其实我在想, 你用 ms 的东西, 没类似的source 或者是plugin 能实现这样的功能吗?   为什么要抓破头脑?
作者: zechs    时间: 2012-4-16 08:56 PM
回复  TmXiaOChAo


    如 weeming 所说的。半小时左右。
    或者,
    没动作, 或没refresh。
...
宅男-兜着走 发表于 2012-4-15 01:48 AM


我有动作, 但是另外台电脑login, 我记录另外台电脑的sess 进去表内, 旧的那台refresh 了检查到cookie id 不同, 被kick。

这个应该就不是楼主要的是吗?你的句子我理解成login在新的地方会kick掉之前的地方,而不是阻止user在新的地方login。
我的方法和weeming一样,不过缺点是user那里crash了,就必须要等到限定的auto logout时间,user才可以在新的地方login。
作者: zechs    时间: 2012-4-16 08:58 PM
回复  TmXiaOChAo


    其实我在想, 你用 ms 的东西, 没类似的source 或者是plugin 能实现这样的功能 ...
宅男-兜着走 发表于 2012-4-15 01:50 AM


ms给的不是万能,是方便。
作者: 宅男-兜着走    时间: 2012-4-16 09:03 PM
回复 24# zechs


    嗯.... 你说的也对, 因为我一直环绕在怎么样子只能在一台电脑login 而已。




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5