当前位置:编程学习 > C#/ASP.NET >>

用户登陆以后,获取用户信息问题

刚才我想了想觉得有点不对劲。可能我是新手还没有理解类的概念。比方说用户的例子:
一个UserName="小菲"的用户,它的UserID=1
当它点登陆按钮以后,执行登陆后台命令:
select * from 用户表 where UserName='小菲'
通过上面的数据库访问我调出这个用户的所有信息然后放在一个user.cs的类文件中(类中定义了变量:username、userid、易做图、age等等用户信息),于是我在以后的页面访问时想用到用户名时,是不是在后台这么写:
user.username来获取他的用户名;
可是要是你刚登陆完,别的用户就登陆了,user.cs中就信息不就被后登陆的覆盖了么?
用户的独有信息我想不是应该用session级别的变量来表示么,如果用类变量访问或其它普通变量,不是很容易发生变化么?
我是这么想法:我合计登陆时,如果成功,就把session["userID"]="用户的ID",然后以后调用用户名或年令什么的就以session["userID"]做为查询条件查用户表来获取,可我想这种方法是不是笨了?而且经常要访问数据库会影响运行?按理说定义实体类的方法应该是好方法,可是怎么用呢,我上面描术的哪里出错了呢? --------------------编程问答-------------------- Up --------------------编程问答-------------------- 笨?
这种角色权限 正常情况下都是用session啊
就算你不用session,而你想获得用户的信息,
因为信息在数据库里,当然要访问数据库啊

  看了半天 不知道LZ 到底是哪里有问题~ 汗~ --------------------编程问答-------------------- session   cookie
--------------------编程问答-------------------- 对对,问题我可能没说清楚,比如说用session吧,我登陆后用了一个session["UserID"],作为我的身份,可是当我访问某个页面时,需要获取我的年令值,应该怎么作,把session["UserID"]作为查询条件去用户信息表中查找年令字段的值么?这样会不会经常访问数据库呀?我今天看它们好像说有个方便的方法:是用户登陆时就把用户所有的信息全部读出来,放到一个东西中,好像是实体类什么的,然后到哪页要用时直接.年令就行了?? --------------------编程问答-------------------- 有个办法就是在用户登录时从数据库取出该用户的所有信息赋值给你声明的(DataSet)(Session[KEY_CACHELOGINUSER]),这样你在哪个页面都能得到该用户的登录信息了。 --------------------编程问答-------------------- Session["UserID"],因为UserID唯一,所以Session["UserID"]唯一,这个如果有其他用户登录也不影响啊  --------------------编程问答-------------------- 你想获得相关信息,
又不想读取数据库来影响网站速度

  汗~ --------------------编程问答-------------------- 就是用Session呀! --------------------编程问答-------------------- 越说越糊涂了,其实我就是想尽量少的访问数据库,只在用户登陆时访问一次数据库,然后得到所有的用户信息,放到一个地方,然后以后用到时去那个地方取就行了,不用每次用到都访问一次数据库!
如果大家听不明白,就不如说说你们在做用户登陆完成时都要做哪些操作,要是以后要访问你的用户年龄时,你们怎么去取!!我的天啊~~~~~ --------------------编程问答-------------------- 5楼朋友好像听明白我的问题了,你的方法听起来不错呀,不过,听你的语气好像这个方法不是被广范使用?难道大家处理这问题都是频繁的访问数据库么??不可能呀?? --------------------编程问答-------------------- 噢对了,还有如果a.aspx这页我不想让游客访问是不是这么写:
 protected void Page_Load(object sender, EventArgs e)
    {
        if(Session["UserID"] != null)
          {
            Response.Write("你可以访问");  
          }
       else
          {
            Response.Write("你没权访问"); 
          }
    } --------------------编程问答-------------------- 是这样的 如果你需要经常访问数据库获得用户信息的话 就可以一个类对象储存用户信息然后将对象放到Session易做图其他页面调用对象中的信息 --------------------编程问答-------------------- (DataSet)(Session[KEY_CACHELOGINUSER])这是5楼朋友说的方法,我觉得很好,请问哪位朋友教教我这个怎么用! --------------------编程问答-------------------- 12楼的朋友,你说的好像很有道理,就是把这个装载着用户信息的类对象放到session中,可是我是这新手,道理能明白,能不能指点下具体怎么写,怎么调用,最好举个简单的写法! --------------------编程问答-------------------- 应该是不能用实体类的。 --------------------编程问答-------------------- 要不等用户登入了,你就把所有信息都写到他cookie里去,到时候要啥拿啥就行了,最多客户端cookie比较多 --------------------编程问答-------------------- 我现在自己是这么做的用户登陆后就获得一个Session["UserID"],然后我定义一个类Str.cs,这个类中我定义一个方法如下:
    public static string ReturnFieldValue(string table, string field, string efield, string e)
    {
        SqlConnection con = DB.creatCon();
        con.Open();
        SqlCommand cmd = new SqlCommand("select " + field + " from " + table + " where " + efield + "='" + e + "'", con);
        string str = cmd.ExecuteScalar().ToString();
        con.Close();
        return str;
    }
然后我来到了hehe.aspx页面,这个页面下我需要提供用户的性别,所以我就么这写:
string 易做图 = ReturnFieldValue("User","SEX","ID",Session["UserID"])
姓别就是易做图的值,大家觉得这样做说得过去么,能将就么?
要取值时我就赋4个参数,分别为用户表名,字段名,查旬条件字段,和查旬条件值。这要是页面需要一二个我觉得还能将就,可是要我把所有用户信息都列出来,我不是每个都得调用一下ReturnFieldValue()函数来访问数据库吧!这下大家明白我想要那种方法的心情和概念了吧!。。。。 --------------------编程问答-------------------- 我上网上看了一下,还有人这么做的?不过有回复说不见意这么做,真是搞不懂,我觉得这样也不错呀?
就是用户登陆后信息全放到dataSet中,然后把它放到Session中,我觉得好像就是5楼说的那个意思,要是这样也不错呀,为什么有人说不见意这么做呢?
Session["xxx"] = dataset
DataSet ds = (DataSet)Session["xxx"];
---------------------------------------------
到现在有三种方法了,不过好像都不理想或者说是好像是歪门斜道,到底真正正确的方法是什么呢,这么常用的问题没有人考虑过么,我自己亲自做网站的人100%会遇到这种情况,希望大家讨论帮助!下面看看到现在的三种方法:
1、把用户信息存放到实体类中(这种做法,具体步骤我不会,待解....)
2、把用户信息存放到DataSet内存数据库中(这种做法,珍体步骤还能将就写下,只是有评论说不见意用这种方法...原因未知!)
3、只通过Session["UserID"]做为查询条件来访问数据库,查到想要的字段信息的值(这种方法可行,但如果页要要提供大量用户信息,如用户名、密码、年龄、性别、生宵、爱好、注册时间、出生年月等更多用户信息的话可能要频繁访问数据库占用大量资源,突然想到可以一次全查出,但还是觉得不得劲)

总而言之,看谁能找到这样的方法(我想100%有):
    只在用户点击登陆的时候,获取用户所有信息资料,放在一个全局变量(这个变量是一个具有唯一性的,就和Session一样的变量)中,然后在任何地方只要想调用该用户的某个信息时,直接取出就好!
--------------------编程问答-------------------- 你在登陆后, 把所有信息 都绑定到session上, 
然后在以后的界面里
直接取相应数据的session值 
这样就好了
这样只要登陆的时候读取数据库信息
以后就不用了 --------------------编程问答-------------------- DataSet也只不过是把数据由硬盘放到内存中
只是加快读取速度
照样还是要读取的啊
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,