我刚到一个公司实习,公司叫我用.NET做一个档案管理系统,功能上就是上传、下载、搜索之类的,主要是安全性,上传下载的权限分了很多级,我以前从来没有用过.net,边学边做花了一周时间才把那些功能在本机上测试通过,但挂上服务器就出现了一个很严重的问题,就是只要有一个人登录了,所有人都可以不用登录直接输地址就可以访问所有的页面,我在想是不是没定位到哪台机器访问服务器,或者是我用SESSION在页面间传值导致的。
    因为几乎所有功能都需检验登录人的各项权限,我不知道C#里的全局变量是怎样的,就用了SESSION传值将登录用的ID在各个页面间传递,具体就比如在登录页面用SESSION[“EMPLOYEEID”]=TXTLOGIN.TEXT,然后在每个页面加载的事件中检验SESSION传来的值是否为空,为空就转到登录页,但现在只要有一个人登录了,传的那个ID就驻留在服务器上了,检验传值就不为空了,其他的人在其他机器上就可以直接输入各页面地址访问了,各项权限检验就完全没用了,我这样做是不是完全没得要领?整个程序是不是都要重做啊?
    我还查了下每个机器登录都要获得一个随机生成的SESSIONID,存在HTTP头文件里,是浏览器自己做的,用户不知道,我能不能获得那个头文件里的信息?或者还有其他办法定位到访问服务器的机器?
    我知道这些事都该自己做的,但我确实一点都不懂.NET,公司一天都在催,我已经改了一天了,还是不知道从何改起,只有上这里来求救了,希望好心的GGJJ帮帮我,感激不尽.如果我说得不够清楚,可以加我QQ183143453,我可以发源码帮忙看看,先谢谢大家了.

解决方案 »

  1.   

    楼主首先应该里一下思路;
    Session是不同的客户端访问就不同的,不会互相产生影响;在asp.net里相当于“全局变量”的是Application,所以要检查一下你的校验逻辑是否正确了
      

  2.   

    配置有问题吧 因为不同的机子登陆后Session.SessionID是不同的  你把你的验证登陆的代码贴出来看看
      

  3.   

    lz提到的HTTP头文件的问题,我们做权限的时候确实有时候会用到它,但是对楼主的需求来说可能没必要,除了获得之外还要考虑如何验证,只会图添麻烦了,用Session就可以解决,还是找个‘熟手’帮你研究一下相关的代码吧
      

  4.   

    你是没有在其他页面去验证session吧。
    在其他页面里都要在页面开始的时候验证session[“uid”]的
      

  5.   

    不知道你的代码是怎样写的,验证代码参考:
    if(Session["user_name"]==null) 
      Response.Redirect("login.aspx");如果你实在找不到问题,建议你换一种验证方式,比如换Form身份验证。
    From验证可以通过在web.config文件中进行一些配置来实现。
    具体代码,你可以在csdn中搜索一下。
      

  6.   

    我就是不知道怎么验证SESSION["UID"],我贴两段代码大家帮忙看看哈
    public class login : System.Web.UI.UserControl
    {
    public string employeeID;
    private void Button1_Click(object sender, System.EventArgs e)
    { 
    //定义一私有变量sPassword,用于接受客户端输入的用户密码
    string sPassword=TextBox2.Text;
    //将客户端接收到的用户名传递给变量employeeID
    employeeID=TextBox1.Text;
    //连接数据库
    SqlConnection myConnection = new SqlConnection("server=.;user id=sa;password=;database=DAmanage");
           
    SqlDataAdapter myCommand = new SqlDataAdapter("select employeePWD from [Employee] where employeeID='" +TextBox1.Text + "'", myConnection);

    DataSet ds = new DataSet();

    myCommand.Fill(ds,"Titles");
    DataRowCollection rows = ds.Tables["Titles"].Rows;

    if(( rows.Count ==0 ))
    {
    labelInfo.Text="该用户不存在!!";
    }
    else 
    {
    string b=rows[0][0].ToString().Trim();

    if(b==sPassword)
    {
    labelInfo.Text="通过验证!";
    Session["employeeID"]=this.TextBox1.Text;
    Server.Transfer("common.aspx");
    }
    else
    {
    labelInfo.Text="密码错误!";
    }

    ds.Clear();

    }


    }
    }public class commonControl : System.Web.UI.UserControl
    {
    private void Page_Load(object sender, System.EventArgs e)
    {
    Label2.Visible=false;

    this.Label2.Text=Session["employeeID"].ToString();
    if(Label2.Text=="")
    {
    Server.Transfer("err.aspx");
    }
    else
    {

    }
    Label1.Visible=false;
    }
    }
    LOGIN类是在登陆页,COMMONCONTROL类是登陆进去那页,验证SESSION该写在什么地方?
      

  7.   

    通过Session来每个页面判断是否登陆还是太过于麻烦了,建议使用微软推荐的.net自带的身份验证机制,可以自行翻阅一下资料看看,在web.config里设置下就好
    -------------------------------------------------------------------------
    .Net技术讨论群14272327,欢迎爱好c#和asp.net的同志加入~队伍正在不断壮大中...
      

  8.   

    session用在一个会话当中,在整个会话过程中,保存的变量不变搂住你看看是不是你把权限都用同一个session负值了 ,没有为每个用户单独建立session
      

  9.   

    怎么为每个用户单独建立SESSION
      

  10.   

    代码发给我,我帮你看看[email protected]
      

  11.   

    Label2.Visible=false;this.Label2.Text=Session["employeeID"].ToString();
    if(Label2.Text=="")
    {
    Server.Transfer("err.aspx");
    }
    else
    {}
    Label1.Visible=false;
    }
    上面的代码楼主不要这么写:
    if(Session["employeeID"].ToString()=="")
    {
    Response.Redirect("err.aspx");
    }
    看看行不行