保存已登陆用户的信息的时候用什么保存最好?是Cookic还是Session,用Session的话只要浏览器一关就需要重新登陆,那样的效果不太好,我希望在一定的时间内都不需要再登陆。但用Cookic的话那些信息都在客户端好象不太安全,有什么好的办法?要是说Cookic加密的话请详细讲下,现在还没怎么接触过加密技术。谢谢了...

解决方案 »

  1.   

    当然是Session, cookie 如果客户端禁止了,怎么办?
      

  2.   

    session吧,同时在线有多少人啊?能占多少资源?
    其他所有的尽量避免甚至杜绝session,否则ie7在同个窗口打开不同选项卡就会出意料不到的问题。
      

  3.   

    cookic吧
      session是保存在服务器的,人多服务器的压力就越大
      cookic保存在客户端,减少服务器的压力。
      

  4.   

    Session只能针对一个浏览器窗口!新开个还要重新登陆Session在服务器上占用服务器资源,Cookic在客户端,但安全性得不到保障,这些东西我都知道。我希望的是:在一定的时间内登陆了就不要再登陆,而且需要一定的安全性,不能说他知道URL就直接让他过去了...
      

  5.   

    那就看是做什么了。
    网站用cookie,系统用session。
    加密是算法问题,网上有很多。
      

  6.   

    session和Cookie配合使用,比较好的选择,Session建议存一些必要属性,这样做会非常方便,而且不会用太多空间,而且挺安全, 如果服务器关闭,就把session中的信息保存到Cookie,这里可以考虑下加密。下次请求时,又利用Cookie重建Session
    考虑到客户端的Cookie可能被禁用,可以加上URL回写的方式,以保证可靠性
    其实这上比较严密系统,一般小系统里边,建议用session很OK,性有不是问题。。
      

  7.   


    这个就是用cookie和session配合得到的效果,用Cookie保存的sessionid来重构session就OK了 
      

  8.   

     lz  说的是向csdn登陆的时候  2周内不用登陆 的单选框吧。。
      

  9.   

    登陆状态session判断
    cookies用来存储用户的登陆信息,用户名密码等.
    提供自动登陆方法.判断有cookies就帮他登陆写好session
      

  10.   

    Session 是非常宝贵的资源,可尽可能少的在 Session 中存放信息,也就是能不往 Session 中存东西就不往里面存东西。一般来说,对于登录用户,仅仅在 Session 中保存一个用户名,至于该用户的其他信息等用到了再去查询。PS:用户名是用户表中一个 UNIQUE 字段。
      

  11.   

      
     我们都是这样来做的,session和Cookie配合使用
      

  12.   

    cookic吧 
      session是保存在服务器的 cookic保存在客户端
      

  13.   

    如果是小型项目,访问量也少的话, 放在session里, 
    要是服务器有集群管理, 服务器容量够大, 放在session里.一般情况下,客户端的cookie是不禁止的. 要是说访问量很大, 服务器也很小, 放在cookie里. 这个问题还是要具体分析.
      

  14.   

    想实现用户关闭浏览器,再打开浏览器时自动登录,就只能用Cookie了
    用Cookie只保存一个用户名在客户端,密码就不要保存了
    加密什么的也危险(如果安全系数要求高)不过这样的缺点就是,如果黑客知道你的网站要求什么样的Cookie,就可以构造管理员的用户名实现登录要安全一点,就把用户名和用户IP什么的合并加密,保存一个加密字符串到客户端Cookie同样,如果黑客知道这个加密字符串,并把自己的数据包IP改成这个IP,一样可以登录总结:想实现自动登录,安全性就不可能太高
    这是安全与易用性的矛盾之处
      

  15.   

    using System;
    using System.Diagnostics;
    using System.Security.Cryptography;
    using System.Text;
    using System.IO;
    using System.Web;namespace Press
    {
        public class CryptoUtil
        {
            
            public static byte[] KEY_64 = { 42, 16, 93, 56, 78, 4, 218, 223 };
            public static byte[] IV_64 = { 55, 103, 46, 79, 36, 89, 167, 3 };        private static byte[] KEY_192 = { 42, 16, 93, 156, 78, 4, 218, 32, 15, 167, 44, 80, 26, 250, 155, 112, 2, 94, 11, 204, 119, 35, 184, 197 };
            private static byte[] IV_192 = { 55, 103, 246, 79, 36, 99, 167, 3, 42, 5, 62, 83, 184, 7, 209, 13, 145, 23, 200, 58, 173, 10, 121, 222 };        //标准的DES加密
            public static string Encrypt(string value1)
            {
                if (value1 != "")
                {
                    
                    DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
                    MemoryStream ms = new MemoryStream();
                    CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_64, IV_64), CryptoStreamMode.Write);
                    StreamWriter sw = new StreamWriter(cs);
                    sw.Write(value1);
                    sw.Flush();
                    cs.FlushFinalBlock();
                    ms.Flush();
                    return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
                }
                return "";
            }        //标准的DES解密
            public static string Decrypt(string value1)
            {
                if (value1 != "")
                {
                    DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
                    byte[] buffer = Convert.FromBase64String(value1);
                    MemoryStream ms = new MemoryStream(buffer);
                    CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_64, IV_64), CryptoStreamMode.Read);
                    StreamReader sr = new StreamReader(cs);
                    return sr.ReadToEnd();
                }
                return "";
            }
        }    public class CookieUtil
        {
            public const string COOKIENULL = null;        public static void SetEncryptedCookie(string key, string val)
            {
                key = CryptoUtil.Encrypt(key);
                val = CryptoUtil.Encrypt(val);
                SetCookie(key, val);
            }
            public static void SetEncryptedCookie(string key, string val, DateTime expires)
            {
                key = CryptoUtil.Encrypt(key);
                val = CryptoUtil.Encrypt(val);
                SetCookie(key, val, expires);
            }
            public static void SetEncryptedCookie(string key, string val, int DayNum)
            {
                key = CryptoUtil.Encrypt(key);
                val = CryptoUtil.Encrypt(val);
                DateTime expires = DateTime.Now.AddDays(DayNum);
                SetCookie(key, val, expires);
            }
            #region///SetCookie
            private static void SetCookie(string key, string val)
            {
                key = HttpContext.Current.Server.UrlEncode(key);
                val = HttpContext.Current.Server.UrlEncode(val);
                HttpCookie cookie = new HttpCookie(key, val);
                SetCookie(cookie);
            }
            private static void SetCookie(string key, string val, DateTime expires)
            {
                key = HttpContext.Current.Server.UrlEncode(key);
                val = HttpContext.Current.Server.UrlEncode(val);
                HttpCookie cookie = new HttpCookie(key, val);
                cookie.Expires = expires;
                SetCookie(cookie);
            }
            private static void SetCookie(HttpCookie cookie)
            {
                HttpContext.Current.Response.Cookies.Set(cookie);
            }
            #endregion
            public static string GetEncryptedCookieValue(string key)
            {
                key = CryptoUtil.Encrypt(key);
                string val = GetCookieValue(key);
                if (val == COOKIENULL)
                    return COOKIENULL;
                val = CryptoUtil.Decrypt(val);
                return val;
            }
            #region///GetCookie
            private static HttpCookie GetCookie(string key)
            {
                key = HttpContext.Current.Server.UrlEncode(key);
                return HttpContext.Current.Request.Cookies.Get(key);
            }
            private static string GetCookieValue(string key)
            {
                try
                {
                    string val = GetCookie(key).Value;
                    val = HttpContext.Current.Server.UrlDecode(val);
                    return val;
                }
                catch
                {
                    return COOKIENULL;
                }
            }
            #endregion
        }
    }
      

  16.   

    Cookie加密到内存?
    不知所云,Cookie能放到内存吗!
      

  17.   

    我用Session,不过我的站点访问量小
      

  18.   

    用ASP.NET方法啊。cookie.很方便的。一般情况下都应该够了吧?
      

  19.   

    session 这是最常用的办法。要按楼主的要求,最好还是Cookie和session配合使用。cookie中记个用户名就好了。
      

  20.   

    用cookie吧!占用内存小,你可以设置cookie的有关属性。
      

  21.   

    Session 是针对一个会话有效的,并非只是针对一个浏览窗口,而我们为避免重复登陆和通过输入URL跳过登陆可以通过使用过滤器和监听器来实现.而且Session是有会话超时设置的,Session在一段时间不活动是会被销毁的.
    现在一般的网站都有保存密码的功能,也就是下次在访问的时候不需要在登陆.这些事通过Cookie实现的,这样来说对于公共场合的电脑对于用户来说是相当不安全的.而且有些浏览器禁用Cookie,难道就不允许用户登陆了吗?所以保存一个用户是否登录来说采用Session中存值是一个好方法.
      

  22.   

    当然是 用 SESSION。  了 
      

  23.   

    kerberos  登录后保存票据到session中就好了,放cookie也可以
      

  24.   

    楼上也说了太多了
    查看是否登录用的是session,
    如果要保存密码之类的那么用cookies
      

  25.   


    比较同意他的观点
    1. 如果需要客户端保存密码,那么必须用cookie,当然,密码+用户名+ts要做加密,可以使用RSA128,MD5就算了吧,听说 被
    被王老师给破了,安全要求高的话,考虑一下是否还要提供保存密码的易用性功能...... 而且每次加密解密一下,也需要运算的
    2. cookie还是要和session结合一下,cookie也就保存一个sessionid,其他的都使用session,session保存的内容
    不要太多,一些pk足矣了吧,再不行把username等保存一下也就得了,你的订单什么的,还是仍到cookie里面吧,但是
    也要注意,cookie太大了,也是要增加流量的,还不如直接塞到session里面去,我想你的webserver解析cookie
    的时候,也需要时间吧,时空性能问题,还是要具体情况具体分析了
      

  26.   

    如果你做门户,就用php、c什么的,java .net还是作企业应用比较爽
      

  27.   

    Session做会话跟踪,记录登陆用户一般都用Session,
    Session有生命周期的,默认是用户最后一次操作后20分钟后,
    该Session自动退出会话。
      

  28.   

    有空我想用Cookie试试现在一直用Session
      

  29.   

    SESSION+COOKIE加密,SESSION不存在时判断COOKIE,COOKIE正确时建立SESSION
      

  30.   

     cache
      

  31.   

    建议用session,现在服务器的配置越来越高,所以服务器的性能不是主要的问题,我以前做做了一个政府的网站,里面90%都是服务器控件,列表数据全是GridView,呵呵政府有钱,服务器很好,虽然每个很多地方都刷新页面,但速度同样个很快用session保存用户登陆信息,很方便使用,是一种不错的选择。如果用Cookie很容易被客户端禁用,那就不好了!
      

  32.   

    cookie吧,我觉得还是cookie好~方便又灵活,而且占用资源少,现在讲究的就是这个。
      

  33.   

    看过苏鹏的教程,说session有时会丢失(的确!),而cookie又不安全,于是微软搞了个profile,貌似在petshop4.0里面就用了,貌似是把信息存到数据库里,我也不太清楚,有兴趣可以查下。
      

  34.   

    访问量不大就用Session吧
    1、安全性比较高
    2、不容易出现丢失访问量大还是用Cookie
    1、用户每次登陆时,创建一个Guid分配给客户端
    2、客户端只在Cookie中保存这个Guid
    3、数据库中保存该用户的Guid及最后登陆时间
    4、最后登陆时间用计算Guid的过期时间
    只保存了Guid,每次登陆都会更换,保证了账号的安全另外还有个 Flash 的Cookie#SharedObjects
    能够实现次数据保存在客户电脑里
    一般的清除Cookie及删除临时文件,都不会清理该数据
      

  35.   

    判断用户是否开cookie,如果cookie没有开,就用session页面给用户进行回复!