表单验证是用Cookie来保存用户数据的,但这样同时间只能使用一个用户登录,我想不用Cookie而用Session来保存用户数据应该就可以支持同时间多用户,但不知道怎么做,哪位高手给个例子。谢谢

解决方案 »

  1.   

    asp.net session 默认也是用 cookie 来保存的
      

  2.   


    我知道,但session只对当前的浏览器有效,而Cookie在失效前对所有的浏览器有效。有谁知道怎么用seesion来保存
      

  3.   

    可以用session  和普通的都一样  直接给session["name"]="aaaa";
      

  4.   


    Form form1 =Form ();
    Session["name"] = form1 ;             
      

  5.   

    Form form1 = new Form ();
    少写个NEW
      

  6.   

    我的代码是这样的        protected void btnLogin_Click(object sender, EventArgs e)
            {
                if (tbUserName.Text == "cyy" && tbPwd.Text == "1")
                {
                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, tbUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(30), true, "User");
                    string cookieStr = FormsAuthentication.Encrypt(ticket);                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);
                    cookie.Expires = ticket.Expiration;
                    cookie.Path = FormsAuthentication.FormsCookiePath;
                    Response.Cookies.Add(cookie);
                    Response.Redirect("index.aspx");//登陆成功后跳转到index.aspx
                }
            }
    在Global.asax
            protected void Application_AuthenticateRequest(object sender, EventArgs e)
            {
                if (HttpContext.Current.User != null)
                {
                    if (HttpContext.Current.User.Identity.IsAuthenticated)
                    {
                        if (HttpContext.Current.User.Identity is FormsIdentity)
                        {
                            FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                            FormsAuthenticationTicket ticket = id.Ticket;                        string userData = ticket.UserData;
                            string[] roles = userData.Split(',');
                            HttpContext.Current.User = new GenericPrincipal(id, roles);
                        }
                    }
                }
            }好像Form表单验证会自己读取Cookies
      

  7.   

    可以用Session 不过这样的话 好像会加重服务器 端的负担
    还是建议你在客户端进行验证 成功之后 用Session保存少量的数据
    如果数据量小用Session不是太明显 如果是大量数据的话
    服务器端就会比较麻烦了
      

  8.   


    可用Cookies,同一台电脑不能运行多个用户登录,只能退一个进一个加上我的用户比较少,用Session问题不大
      

  9.   

    那用户少的话 你用Session验证也可以啊 程序是自己写的 咱们根据自己的条件 量力而行啊
      

  10.   


    呵呵,那天发现.net 2.0的表单验证很好用,可以不用先以前ASP那样每个页面都要加Session[""]==""的判断,但我只找到用Cookies保存用户数据的例子,不知道怎么改成Session
      

  11.   

    其实Session和Cookie保存数据的方式都一样,只不过保存数据的地方不一样而已
    Session中的数据保存在服务器端 而cookie中的数据保存在客户端 如果说不是太敏感的数据
    你用Cookie保存就可以了  如果说是比较敏感的数据你用Session保存 Session 和Cookie存储
    和取数据的方式是一样的 没什么区别
      

  12.   


    但Session只对当前的浏览器有效,而Cookie对所有浏览器有效,但用户在另一个浏览器用另一个账号登陆时Cookie就会被改写,而Session不会。
      

  13.   

    那是啊 Cookie保存在客户端 这就是为什么要保存不敏感数据的原因了
    因为他的安全系数较低 而Session保存在服务器端 只要当前用户一直
    保持登录状态 那么他的值就不会变 
      

  14.   

    请楼主要清楚Seesion代表什么什么不能同时多用户登陆???开什么玩笑啊你一个ASP。NET程序,aspwape.exe程序会运行它,给它开设一个专用的工作进程,你可以想向为一个合子而每个用户请求,它又会分出线程(也就是我们常说的多条线程同住于一个工作进程里面)来负责回应,Seesion是属于线程的,只对当前请求的用户有效,每条线程里的Seesion各自独立,互不相关如果你想让多条线程里的内容相关,请使用全局变量Application,或者是全局静态变量(自己定义的那种)
    大学里的计算机操作系统那说得可能清楚些
    Seesion比Cookie灵活,可以说是Cookie的内存版,但是因为C#的动态解析型语言,所以只要你更改了文件夹里的东西(如App_Code文件夹),ASP。NET工作进程就会自动重启,有一种情况,微软的啦圾回收机制,不管你再怎么着,ASP。NET工作进程会在默认的最大时间内强制重启工作进程,以便啦圾回收,这是微软定死的,你没法改,除非改内核!
    这就造成了我们常见的Seesion丢失问题