我刚到一个公司实习,公司叫我用.NET做一个档案管理系统,功能上就是上传、下载、搜索之类的,主要是安全性,上传下载的权限分了很多级,我以前从来没有用过.net,边学边做花了一周时间才把那些功能在本机上测试通过,但挂上服务器就出现了一个很严重的问题,就是只要有一个人登录了,所有人都可以不用登录直接输地址就可以访问所有的页面,我在想是不是没定位到哪台机器访问服务器,或者是我用SESSION在页面间传值导致的。
因为几乎所有功能都需检验登录人的各项权限,我不知道C#里的全局变量是怎样的,就用了SESSION传值将登录用的ID在各个页面间传递,具体就比如在登录页面用SESSION[“EMPLOYEEID”]=TXTLOGIN.TEXT,然后在每个页面加载的事件中检验SESSION传来的值是否为空,为空就转到登录页,但现在只要有一个人登录了,传的那个ID就驻留在服务器上了,检验传值就不为空了,其他的人在其他机器上就可以直接输入各页面地址访问了,各项权限检验就完全没用了,我这样做是不是完全没得要领?整个程序是不是都要重做啊?
我还查了下每个机器登录都要获得一个随机生成的SESSIONID,存在HTTP头文件里,是浏览器自己做的,用户不知道,我能不能获得那个头文件里的信息?或者还有其他办法定位到访问服务器的机器?
我知道这些事都该自己做的,但我确实一点都不懂.NET,公司一天都在催,我已经改了一天了,还是不知道从何改起,只有上这里来求救了,希望好心的GGJJ帮帮我,感激不尽.如果我说得不够清楚,可以加我QQ183143453,我可以发源码帮忙看看,先谢谢大家了.
因为几乎所有功能都需检验登录人的各项权限,我不知道C#里的全局变量是怎样的,就用了SESSION传值将登录用的ID在各个页面间传递,具体就比如在登录页面用SESSION[“EMPLOYEEID”]=TXTLOGIN.TEXT,然后在每个页面加载的事件中检验SESSION传来的值是否为空,为空就转到登录页,但现在只要有一个人登录了,传的那个ID就驻留在服务器上了,检验传值就不为空了,其他的人在其他机器上就可以直接输入各页面地址访问了,各项权限检验就完全没用了,我这样做是不是完全没得要领?整个程序是不是都要重做啊?
我还查了下每个机器登录都要获得一个随机生成的SESSIONID,存在HTTP头文件里,是浏览器自己做的,用户不知道,我能不能获得那个头文件里的信息?或者还有其他办法定位到访问服务器的机器?
我知道这些事都该自己做的,但我确实一点都不懂.NET,公司一天都在催,我已经改了一天了,还是不知道从何改起,只有上这里来求救了,希望好心的GGJJ帮帮我,感激不尽.如果我说得不够清楚,可以加我QQ183143453,我可以发源码帮忙看看,先谢谢大家了.
Session是不同的客户端访问就不同的,不会互相产生影响;在asp.net里相当于“全局变量”的是Application,所以要检查一下你的校验逻辑是否正确了
在其他页面里都要在页面开始的时候验证session[“uid”]的
if(Session["user_name"]==null)
Response.Redirect("login.aspx");如果你实在找不到问题,建议你换一种验证方式,比如换Form身份验证。
From验证可以通过在web.config文件中进行一些配置来实现。
具体代码,你可以在csdn中搜索一下。
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该写在什么地方?
-------------------------------------------------------------------------
.Net技术讨论群14272327,欢迎爱好c#和asp.net的同志加入~队伍正在不断壮大中...
if(Label2.Text=="")
{
Server.Transfer("err.aspx");
}
else
{}
Label1.Visible=false;
}
上面的代码楼主不要这么写:
if(Session["employeeID"].ToString()=="")
{
Response.Redirect("err.aspx");
}
看看行不行