none
求助关于Session的问题 RRS feed

  • 问题

  • 求问想实现两种不同的注销效果该怎么做呢.
    一个是通过注销清除服务器上所有的Session,比如某一个用户点击注销后所有在该页面登录的用户都同时注销
    二是单独用户的注销,即某用户注销后不影响其他的用户的登录信息.
    在网上查了一下说Session.Abandon()是清除所有存储在Session中的对象,但我自己在写程序时候发现用Session.Abandon()只能清除当前用户的登录信息,并不能一起清除所有用户的登录信息.

    2010年1月7日 7:25

答案

全部回复

  • 你好!

    用户点击所有用户注销时在 Application 中记录一个标志。

    程序中设计一个定时器,每隔一类时候去判断那个标志,以确定是否要注销。

    知识改变命运,奋斗成就人生!
    • 已建议为答案 dotey 2010年1月7日 13:40
    2010年1月7日 7:29
    版主
  • 要注销的时候该怎么注销呢?Session.Abandon()是只清楚当前用户的Session信息么..

    2010年1月7日 7:31
  • 调用 Session.Abandon() 。

    这样说可能会更好理解一些,每个用户都有一个计时器,通过计时器每隔一段时间去判断一下自己是否应该主动注销。

    知识改变命运,奋斗成就人生!
    2010年1月7日 7:39
    版主
  • 不太明白..
    可以这样理解么,也就是说,如果计时器的间隔没到,那么无论调用什么方法也无法实现某一用户单击注销后,所有在该页面登录的用户刷新页面后都注销的效果,这样?

    2010年1月7日 7:43
  • 第二个 很简单啊 赋值为null就行了
    2010年1月7日 7:45
  • 感觉1实现有些难度

    首先你要明白SESSION的原理
    只有服务器对客户端SESSION进行操作,而客户端是不能对服务器端SESSION进行操作的,
    如果可以的话,将可能是一个安全漏洞,
    如果想清除所有服务器端的SESSION,重启IIS
    努力+方法=成功
    2010年1月7日 7:48
  • 如果不能操作的话,有没有办法遍历所有登录用户呢?比如每个用户在登录之后在Session中存储一个username,然后能遍历所有在该页面登录过的用户的username呢
    2010年1月7日 7:59
  • 如果不能操作的话,有没有办法遍历所有登录用户呢?比如每个用户在登录之后在Session中存储一个username,然后能遍历所有在该页面登录过的用户的username呢

    你可以换个方案解决的 创建临时数据库 判断一个是否登陆 如果登陆过 把值为1 未登录是0 每次访问都更新时间 定时循环查询数据库时间 如果超时的话 把登陆数据为0
    2010年1月7日 8:58
  • 清除所有的应该是Session.Clear();
    清除当前的session就有很多办法了。比如:Session["NAME"]=NULL;
    Session.Abondon()是取消当前会话。

    详细情况可以参考微软文档。
    http://msdn.microsoft.com/zh-cn/library/system.web.sessionstate.httpsessionstate_members.aspx
    Microsoft Online Community Support
    2010年1月8日 2:19
  • 感谢楼上几位高手啊,终于弄明白了..
    2010年1月8日 5:04