none
判断用户会话已经结束是Context.User.Identity.Name还是Session? RRS feed

  • 问题

  • 是用if (Context.User.Identity.Name == null || Context.User.Identity.Name == "")
    还是if(Session["xxxxx"]==null) 好呢?
    Session容易丢失,Context.User.Identity.Name不容易丢失(和Cookie生命周期一致),是否认为使用Context.User.Identity.Name判断要好一些?
    请指点。
    或者还有更好判断用户会话结束的方法?
    谢谢!

    2009年12月31日 0:09

答案

  • 谢谢大家的解答,经过几天查找和分析,我对自己问题的解答如下,供有同样困惑的网友参考。
    问题得分情况解答:
    (1)如果设置cookie是非持久性的,使用Context.User.Identity.Name == null和Session["xxxxx"]==null判断等效,即会话过期或者关闭网页,这两者都会变成null。
    (2)如果设置cookie是持久性的,两者效果不同。Session["xxxxx"]在会话过期或者关闭网页后将变成null,而Context.User.Identity.Name 会根据cookie失效时间到期后变成null的。
    结论:到底选择哪个,根据实际需求选择。如果碰到Session容易丢失并且安全要求比较高的话,可以考虑使用StateServer和SQL Server存储session。
    • 已标记为答案 sthma 2010年1月3日 4:55
    2010年1月3日 4:55

全部回复

  • 按照常规的做法,是应该进行判断if(Session["xxxxx"]==null),但是你如果觉得Session容易丢失的话,你可以设置Session丢失的时间,并且你还可以做一个Session持久化操作。
    黑猫警长:我们也只有随着这股气息,不断挣扎,最后越陷越深。
    • 已标记为答案 sthma 2010年1月3日 4:42
    • 取消答案标记 sthma 2010年1月3日 4:57
    2009年12月31日 2:43
  • 是用if (Context.User.Identity.Name == null || Context.User.Identity.Name == "")
    还是if(Session["xxxxx"]==null) 好呢?
    Session容易丢失,Context.User.Identity.Name不容易丢失(和Cookie生命周期一致),是否认为使用Context.User.Identity.Name判断要好一些?
    请指点。
    或者还有更好判断用户会话结束的方法?
    谢谢!


    看需求来决定用什么
    如果想保存在客户端用cookie 如果想保存在服务端用session
    2009年12月31日 6:52
  • 你好,不知道你是否要的是这个。

                MembershipUser user = new MembershipUser();//注意重载多个版本
                user.IsOnline
    2009年12月31日 9:48
    版主
  • 谢谢大家的解答,经过几天查找和分析,我对自己问题的解答如下,供有同样困惑的网友参考。
    问题得分情况解答:
    (1)如果设置cookie是非持久性的,使用Context.User.Identity.Name == null和Session["xxxxx"]==null判断等效,即会话过期或者关闭网页,这两者都会变成null。
    (2)如果设置cookie是持久性的,两者效果不同。Session["xxxxx"]在会话过期或者关闭网页后将变成null,而Context.User.Identity.Name 会根据cookie失效时间到期后变成null的。
    结论:到底选择哪个,根据实际需求选择。如果碰到Session容易丢失并且安全要求比较高的话,可以考虑使用StateServer和SQL Server存储session。
    • 已标记为答案 sthma 2010年1月3日 4:55
    2010年1月3日 4:55