问题描述
大神指教,大神指教,大神指教,大神指教,大神指教,大神指教,
解决方案
解决方案二:
自己顶顶自己顶顶自己顶顶自己顶顶
解决方案三:
同时点击?服务器端总有个接受的先后顺序先到的不管是哪个,后到的拒绝就是了
解决方案四:
是指多个客户端同时点击登录按钮?还是一个客户端迅速的按了两次按钮?这个登录指的是LogOn?还是往数据库里面插数据?客户端是WinForm?还是WebForm?
解决方案五:
同时点击?怎么也有个先来后到吧。
解决方案六:
这个跟同时不同时有任何关系?逻辑都是一样的.你只要别用全局静态变量来放东西,就不会互相影响.
解决方案七:
和楼上意见一致。同时点击有什么影响呢??
解决方案八:
没有page都是不同的实例,不用全局变量的话没有影响数据库查询用withnolock
解决方案九:
同时点击登陆有影响的么?
解决方案十:
问题阐述的不够清楚啊
解决方案十一:
没有什么编程经验的人,可能认为“服务器有个先来后到的”。asp.net至少在2.0以上,是并发多线程处理前端请求的。所谓并发,比如说有两个线程中的代码,第一个执行x=b+1;
而另一个执行x=b-1;
这仍然会产生数据结果的冲突(错乱)。但是别忘记了,你的页面中的代码通常并不共享这样的变量(x和b)。同时假设这里的x和b是指数据库中的数据,你如果使用关系数据库,通常关系数据库的事务保护级别是可以做到避免幻像读数据的。然而,现在几乎所有高效率的NoSQL都不支持这类数据库事务,也就说完全可能产生错误的数据。可是这种方式非常流行,如果应对可能产生的错误,请你自己去网上找答案吧。
解决方案十二:
如果应对可能产生--〉如果要应对可能产生
解决方案十三:
同时操作的话最好上锁,lock这样基本上是不会有影响了、
解决方案十四:
服务端做处理前创建队列.处理的时候轮询队列呗
解决方案十五:
为了防止并发,可以采用lock锁上,当一个用户在操作的时候就不允许其他用户操作。publicstaticDictionary<string,object>lockDic=newDictionary<string,object>();voidCreateSN(){//每次只允许符合条件的数据,避免并发。lock(lockDic[""]){//....}}
解决方案:
处理登陆信息如下:protectedvoidbtnLoad_Click(objectsender,ImageClickEventArgse){HttpCookiecookie=Request.Cookies["CheckCode"];if(String.Compare(cookie.Value,txtVali.Text,true)!=0){Response.Write("<scriptlanuage=javascript>alert('验证码错误');location='javascript:history.go(-1)'</script>");}else{DataSetds=DB.reDs("select*fromtb_HuenLianwhereUserName='"+txtUid.Text.Trim()+"'andPassWord='"+txtPwd.Text.Trim()+"'");inti=this.checkLogin(txtUid.Text,txtPwd.Text);if(i>0){Session["id"]=ds.Tables[0].Rows[0][0].ToString();Session["UserName"]=this.txtUid.Text;//记录用户名Session["PassWord"]=this.txtPwd.Text;//记录密码Page.Response.Redirect("Yonghu.aspx");//登陆成功跳转地址}else{//CodeGo.net/Response.Write("<scriptlanuage=javascript>alert('用户名称或密码错误!');location='javascript:history.go(-1)'</script>");}}}publicintcheckLogin(stringloginName,stringloginPwd){SqlConnectioncon=newSqlConnection(ConfigurationManager.AppSettings["conn"]);SqlCommandmyCommand=newSqlCommand("selectcount(*)fromtb_HuenLianwhereUserName=@loginNameandPassWord=@loginPwd",con);myCommand.Parameters.Add(newSqlParameter("@loginName",SqlDbType.NVarChar,20));myCommand.Parameters["@loginName"].Value=loginName;myCommand.Parameters.Add(newSqlParameter("@loginPwd",SqlDbType.NVarChar,50));myCommand.Parameters["@loginPwd"].Value=loginPwd;myCommand.Connection.Open();inti=(int)myCommand.ExecuteScalar();myCommand.Connection.Close();returni;}