这个和机器关系吗?session只不过存储在服务器端的内存中的变量而已,与客户机没有关系.
所以这样的偶尔会出现的问题只能说明编码不够安全或者不够严密,请认真检查你的程序.
尤其是设置和获取session变量的地方.特别注意的是session变量有没有命名上的重复或者冲突.
所以这样的偶尔会出现的问题只能说明编码不够安全或者不够严密,请认真检查你的程序.
尤其是设置和获取session变量的地方.特别注意的是session变量有没有命名上的重复或者冲突.
解决方案 »
- 如何获得数据集里面的单个信息
- xfire 客户端
- Hibernate的查询问题
- struts2请求action中的一个方法。可是这个action中的其他方法也会全部被执行??
- 在JSP页面里如何高亮显示从数据库提取出来的数据?
- 关于在JSP中嵌套javascript的问题
- 请高手帮帮忙!!谢谢
- 在myeclipse5.5ga下开发。总是提示Multiple annotations found at this line错误
- 高手们帮帮忙啊,我在线等待,JDBC错误java.lang.NullPointerException
- 关于数据库
- JAVA高手来帮菜鸟一个忙
- 可不可以即使用asp又使用jsp的脚本语言在一个html,或asp或jsp文件中
1) 两次登录的问题发生在固定的机器,但是出现几率也是比较低的。
2) 这些机器配置基本一样(机器为2批,但发生这种现象的机器2批中各有一两台。
操作系统均为win2k professional , IE6.0/IE 6.0 sp1
Web服务器是1台,数据库服务器1台
而极少的情况下,我们会使用文件夹上面的浏览框里面直接输入我们系统的URL,这个时候,在此页面的所有页面均使用正常,但是,弹出页面居然会出错(权限未通过!)
由此证明,使用文件夹直接输入URL的时候,弹出的窗体和它的父窗体不共享session!!!
我这里用tomcat做了个数据库代理的程序,
可是最近出现了了这样的错误,当我往数据库里写东西时,我只可以写8个参数,只要一加第9就个就会出错,另外以前的程序没错的,而且也验证过现在的tomcat4.1版本可以在服务器上操作,但是在本地机器上就不可以操作了,出错信息是:Sql error description is: jdbcbase.TdsException: I/O exception while talking to the server, java.net.SocketException: Connection reset by peer: socket write error
初步估计是tomcat4.1和本地的SQL2000的冲突,
配置 win2k professional,SQL2000服务器版,j2sdk-1_4_2-windows-i586,
那你后来实施的时候有问题吗?
to yyn911:
你的叙述不够详细,还是不太明白你的问题。我也说个tomcat 5和tomcat 4的问题。
我觉得tomcat 4比较成熟好用,但5对中文的处理就不是很好了,很容易出现问题,并且有时候容易丢失http内容。
比如: insert sdr(1,2,3,4,5,6,7,8) values (?,?,?,?,?,?,?,?)
当有8个参数时是成功的!!(包括<8)
insert sdr(1,2,3,4,5,6,7,8,9) values (?,?,?,?,?,?,?,?,?)
只要再加一个就错了!!
我试过只要是8个参数,不论是什么格式的,都对,SQL语句出错的可能没有!!
比如: insert sdr(1,2,3,4,5,6,7,8) values (?,?,?,?,?,?,?,?)
当有8个参数时是成功的!!(包括<8)
insert sdr(1,2,3,4,5,6,7,8,9) values (?,?,?,?,?,?,?,?,?)
只要再加一个就错了!!
我试过只要是8个参数,不论是什么格式的,都对,SQL语句出错的可能没有!!
我这里只有jcreator好象不能的!!
而且我现在不用tomcat,只是写了一个连接数据库的程序,居然也有这样的问题,
我怀疑是我的SQL有问题,
另外,我想知道。java中有限制输入输出流大小吗??
我用cavaj反编译的没什么问题!!
下面是反编译过的程序,你看看,我看不出什么问题!!
import java.io.PrintStream;
import java.sql.*;
import java.util.Properties;public class DOSE
{ public DOSE()
{
} public static void main(String args[])
{
Object obj = null;
Properties properties = new Properties();
try
{
String s = "2003-10-1 10:10:10";
String s1 = "2003-10-1 10:50:10";
String s2 = "40";
Object obj1 = null;
Object obj2 = null;
Object obj3 = null;
Object obj4 = null;
Object obj5 = null;
Object obj6 = null;
Object obj7 = null;
Object obj8 = null;
Object obj9 = null;
Object obj10 = null;
Object obj11 = null;
Object obj12 = null;
Object obj13 = null;
Object obj14 = null;
Object obj15 = null;
Object obj16 = null;
Object obj17 = null;
Object obj18 = null;
Object obj19 = null;
Object obj20 = null;
Object obj21 = null;
Object obj22 = null;
Object obj23 = null;
Object obj24 = null;
Object obj25 = null;
Object obj26 = null;
String s3 = "200001";
String s4 = "1001";
String s5 = "110011";
String s6 = "10000225100";
double d = 0.5D;
double d1 = 0.5D;
String s7 = null;
Class.forName("jdbc.MicrosoftDriver").newInstance();
String s8 = "MUMS99";
String s9 = "missile101";
String s10 = "jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=MUMS99";
Connection connection = DriverManager.getConnection(s10, s8, s9);
s7 = "insert into sdr(service_start,service_end,platform_no,service_time,service_code," +
"customer_no,account_id,rate,record_time,usage_amount) values (?,?,?,?,?,?,?,?,ge" +
"tdate(),?)"
;
PreparedStatement preparedstatement = connection.prepareStatement(s7);
preparedstatement.setString(1, s);
preparedstatement.setString(2, s1);
preparedstatement.setString(3, s3);
preparedstatement.setString(4, s2);
preparedstatement.setString(5, s4);
preparedstatement.setString(6, s6);
preparedstatement.setString(7, s5);
preparedstatement.setDouble(8, d);
preparedstatement.setDouble(9, d1);
int i = preparedstatement.executeUpdate();
if(i > 0)
{
System.out.println("01");
} else
{
System.out.println("99");
}
preparedstatement.close();
connection.close();
}
catch(SQLException sqlexception)
{
System.out.println(sqlexception.toString());
}
catch(Exception exception)
{
System.out.println(exception.toString());
}
}
}
response.addHeader("Pragma" , "no-cache") ;
response.addHeader("Cache-Control", "no-cache");
response.addDateHeader("Expires",0);
%>
页面都加上.不敢肯定是否是缓存问题.反正偶试过这种情况(系统登录部分).建议测试时用最多问题的电脑进行测试
明天到公司就试试!
可是最近公司机器都比较少出现登录2次的现象
"customer_no,account_id,rate,record_time,usage_amount) values (?,?,?,?,?,?,?,?,getdate(),?)"中间有个getdate()?是不是该调整一下问号的位置。可能你的问题真的很奇怪 @__@
没有兴趣是不对的,毕竟瘦客户端是发展方向嘛 :)我以前VC/VB/Delphi/CB都做过的哦。
尽快完成我的项目,开WEB,给我点支持。
你的第二个问题出现的原因确实是windows folder和explorer访问的问题。我们这边也碰到过。这两个东西确实不是共享一个session.可大家都不清楚为什么会这样,现在还没找到一个权威的解释。关注大家。
SORRY~偶没看清你的问题就回答你了~两次登录问题曾经遇过那时候系统登录包含SESSION+COOKIE,后来不用COOKIE后基本没问题(<==可能偶的程序有问题).另一个是一个用户登录进去之后有时候显示前一个用户的信息(<==当然这是缓存的问题),还有其他一些小问题如果真是windows folder和explorer访问的问题,那也没什么办法,只好要求用户用合适的explorer.
问题二的原因:
在windows folder是会出现第二个问题的.原因是由于弹出页面是explorer,explorer和windows folder是不可能存在继承它的父页面的session的情况.问题1:
要进行几个方面的判断
1.在出错时,如果你不管他,点其它要登陆的页面,然后再点刚才出错的这个页面,如果依然错误,那么就可以确定是缓存的问题.2.一般的流程是这样的:
验证页面
if (request.getParameter("username")== null)
{
request.setParameter("lastURL") == 当前页面的URL;
PageContext.forward("login.jsp");
}
登陆页面
...
if (验证成功)
{
String slastURL = request.getParameter("lastURL");
if (slastURL == null) slastURL = "success.jsp";
PageContext.forward(slastURL);
}从你的介绍看,你们的与上面有些不同,有一个"用户未登录的错误提示页"
我猜测你们的流程是这样走的,
用户进入保护页--->安全检查发现未登陆--->转入"用户未登录的错误提示页"--->转入登陆页
如果是这样的话,在登陆面进行合法检查通过后,它将会将页面导向"用户未登录的错误提示页",于是就出现了你的问题1
而如果走正常的流程,一开始先登陆--->登出成功的提示页--->点击其它页面,就不会出任何问题.如果还是有问题,我建议你将你们的登陆流程大致写出来一下,也好帮你查原因些
是因为你用文件浏览器打开的原因,如果用IE就不会有问题了
可以考虑将系统入口做成快捷方式,用IE打开
可以防止用户用文件浏览器访问系统
流程基本如你所说 登陆页 --> 填充必须的session --> 成功后Redirect到 index.jsp/index servlet---> index servlet验证session是否存在 ---存在---> 正常登陆
|
|--不存在---> 到统一错误处理页面 --> 用户点击返回到登陆页
你们使用javabean来保存信息,那你们怎么维护? 使用了TTL(Time To Live)方式吗?而且使用javabean的方式恐怕需要客户端回写用户名或验证id吧 (rewrite)
那就祝愿你明天测试一举通过吧
Good Luck!