日期:2014-05-18  浏览次数:20713 次

有关串号的问题求达人解惑
用户输入用户名密码执行登陆后账号会变成他人的。请高人帮忙解答是什麽问题,多谢。

//框架用的是struts,用户名和密码从Form中获得
String sUserName = logonForm.getUserName();
String sPassWord = logonForm.getPassword();
String sql = "SELECT * FROM tbl_Users WHERE sUserName='" + sUserName + "' AND sPassWord='" + sPassWord + "'";
........
但是将sUserName 和 sql 打印出来后,有的时候值会不一样。
比如,System.out.print(sUserName);结果是"abcd"
但是打印sql的结果却是:"SELECT * FROM tbl_Users WHERE sUserName='mmmm' AND sPassWord='000000'"

sUserName赋值给sql之后值变掉了。从abcd变成了mmmm。实在想不通为什么会出现这样的情况。另外这种情况主要是在在线用户比较多,服务器的CPU都被占满的情况下发生的。应用服务器用的是TOMCAT5。难道在服务器负荷的情况下会内存错乱?

求达人帮忙分析一下原因。多谢多谢。

------解决方案--------------------
登陆人数很多的时候,系统都会调用登陆的验证方法,可能一次请求的验证还没有处理完,第二此请求又进来了,造成了数据的混乱...
可以考虑给登陆验证方法 加上 synchronized