比如说,一个用户登录,系统验证通过了会产生一个User对象,然后存入Session,供系统在接下来的操作中去使用。但是听说这样的做法,会导致服务器性能下降。请问有什么替代方案,可以达到在一个用户的会话阶段,可以一直持续化保留某个对象吗?谢谢!

解决方案 »

  1.   

    你可以使用cookie保存信息到客户端
      

  2.   

    同意放到cookie里,本身.net的session就不稳定,
      

  3.   

    用cookie可以,但是客户端要是禁用的话好像就不行了。
      

  4.   

    cookie可以,也可以在客户端加载一个小小的顶层隐藏页面,比如用户名,用户信息之类的东西登陆之后统统加载进去。
      

  5.   

    Cookie在客户端不能达到用户安全,应为Cookie是跟domain绑在一起的。
      

  6.   

    找个容器装对象,Session中存放对象索引。
      

  7.   

    放到 cookie 里面,可以减轻服务器端的负担
      

  8.   

    说是这么说用用也无妨
    当然forms验证也可以
      

  9.   

    cookies不是好的解决办法。
    为什么要把整个User对象放到Session中呢?
    把UserID,UserName,UserType等常用信息存放到Session 中就可以了,不常用的在用的时候到数据库中找就好了!
      

  10.   

    System.Configuration.ConfigurationSettings.AppSettings
      

  11.   

    SESSION    安全的说, 世界上没有十全十美的东西。
      

  12.   

    或者利用forms验证,写到票据的UserData里,这也COOKIE的原理,但是加密的,安全不用担心.
      

  13.   

    webconfig文件中加入变量,然后用System.Configuration.ConfigurationSettings.AppSettings调用
      

  14.   

    1. 否定WebConfig的解决方案...因为User对象要根据登录者的不同产生各自的User对象。2. 为什么要把User对象放到Session中:   验证通过以后,通过public static User User.Find(string account)返回一个User对象,这个
       User对象,只具有read-only的属性,比如说:
       public class User {
         ...
         private string userName;
         
         public string UserName {
             return this.userName;
         }
       }
       这样,避免在登录后还可以修改User对象的属性.
       把User对象放入Session中: 
       User user = User.Find("xport");
       Session["User"] = user;
       以后就可以直接转型来访问好了,不用再访问数据库了:
       User user= (User)Session["USER"];
       string userName = user.UserName;   请大家继续帮忙...
      

  15.   

    那种性能好一些,看具体的应用了,如果普通的session很多的Memory,那么可以尝试db session.
      

  16.   

    用cookie可以,但是客户端要是禁用的话好像就不行了。
      

  17.   

    cookie,cookie,禁用了就提示让他打开
      

  18.   

    楼上的朋友, 请问Context的生命周期是怎么样的?如果加入了Context的Object,是否一致会存在,直到我的Web Application重新启动?如果放在Context中,是Page Scope可见,还是说一旦这个页面执行完毕,这个页面所关联的Context就被释放掉了?如果Context是公用的,在很多人并发访问的时候,能把不同request对应的User对象隔离开吗?谢谢...
      

  19.   

    喔...如果要存一個id, 就變成我還要每次在需要的時候去連接數據庫, 查詢回來我所需要的其他信息.而我是希望一開始用戶登錄的時候, 就可以存下這些相關的資料, 用一個User對象來保存, 不過聽說將對象存入Session, 會花額外的開銷作序列化的動作, 所以, 如果人數一多,比如說3000人同時在線(我們公司的實際情況),這樣是不是就吃掉了服務器上很多的內存, 消耗了很多的資源????
      

  20.   

    嘿嘿 3000人的网站 你的服务器应该是什么配置呢?
    我们的目标是写质量高,效率高的代码,但是有些问题我认为是可以增加硬件的配置来解决的。再说session并不是效率差的不能用.
    楼主可以用测试软件 模拟3000个用户并发, 看看资源有多少?
      

  21.   

    要达到高性能,又要安全
      那最好是用session
      但是楼猪是把整个user都放入session中, 那就没有必要了,USER信息不是在每个步骤都要用的  所以建议还是只存储 主键 user_id
      需要用的时候 利用这个user_id 实例化一个对象即可。。
      
     
      

  22.   

    Session 存放少量的信息是完全没有问题的。
      

  23.   

    喔...如果要存一個id, 就變成我還要每次在需要的時候去連接數據庫, 查詢回來我所需要的其他信息.而我是希望一開始用戶登錄的時候, 就可以存下這些相關的資料, 用一個User對象來保存, 不過聽說將對象存入Session, 會花額外的開銷作序列化的動作, 所以, 如果人數一多,比如說3000人同時在線(我們公司的實際情況),這樣是不是就吃掉了服務器上很多的內存, 消耗了很多的資源????
    Session也可以用数据库来实现的,但如果Session不是由数据库实现,那么是不会存在序列化的性能开销的。因为在系统就是利用一个Dictionary保存SessionID、Session值对的。