为什么好几个IE共用一个Session??? 不同的电脑共用一个session,不可能吧??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可能一个IE没有关闭,接着打开另一个,这样就共用一个session,而且必须是同一个机器 不可思议,你把你的源程序发给我看看吧·![email protected] 我也知道不可能,但是确实发生了,就是说session变成了一个系统变量,而不是一个会话变量。 csdn的论坛也有这问题,我试过同时用两用户登录回贴时都是用后一个用户的ID回的。 你是用Ctrl + N 打开的页面? 我在电脑A上用“张三”,这时我看见“张三”的内容,之后,我在电脑B上用“李四”登录后,这时,我再到电脑A上,刷新页面,“张三”的内容马上变成“李四”的内容 了。代码很简单,我就是在登录的时候把“UserId”放进session,如前面所写,然后用到SQL语句时,再取出"userId",如:sql="select * from ....where userid="+(String)session.getAttribute("UserID") 不会是同一个IE的连接所成,在不同的电脑上的IE也是这种情况。 session是和cookie配合使用的,一台机器对相同url缺省情况下使用一个cookie,所以后者会取代前者的session,可以明确使用cookie来改变这一点。不同电脑不可能会用同一session的!否则就是你发现了MS的bug我估计你的原意是不同电脑上也是相同情况出现吧。 to:learnner是这种情况,同一台机器,不同的机器都 是这种情况。 你的ie是重前一个ie ctrl+N打开的吗?这样就有可能是一样的session,如果是新开的就可以了。 在不同的电脑上的IE也是这种情况,就不用考虑是否是新的IE窗口。我在电脑A上用“张三”登录,这时我看见“张三”的内容,之后,我在电脑B上用“李四”登录后,这时,我再到电脑A上,刷新页面,“张三”的内容马上变成“李四”的内容 了。 我也发现过这样的问题,但我研究后发现这样一个规律:首先我讲一下我要用到的概念:1、由桌面IE图标打开的窗口称为“父窗口”,父窗口与父窗口之间称为“兄弟窗口”2、由父窗口新弹出的窗口称为“子窗口”3、由子窗口弹出的窗口称为“孙窗口”,这时这个子窗口也称为孙窗口的父窗口兄弟窗口之间共享同一个Cookies和Session子窗口及其产生的孙窗口共享同一个Cookies和Session由不同父窗口产生的子窗口用的是不同的Cookies和Session 还有一点我忘了讲父窗口与其后代窗口用不同的Session和Cookies如果要解决这个问题你可以用子窗口中实现这个Session,这样就不会相互干挠我觉得这一点中国工商银行网站做得很好 关于这个问题,我想再强调一下:请大家仔细看下面:我在电脑A上用“张三”登录,这时我看见“张三”的内容,之后,我在电脑B上用“李四”登录后,这时,我再到电脑A上,刷新页面,“张三”的内容马上变成“李四”的内容 了。 以前我的程序好像也有这样的问题,但是只是在ie6版本是这样,ie5就是好的。 session=request.getSession(false); 也不行!登录的原码如下: public boolean doLogin (LogonForm lf, HttpServletRequest request) { String user = ""; String password = ""; user = lf.getUser(); password = lf.getPassword(); if (checkLogin(user, password)) { uri.setUserIP(request.getRemoteAddr()); uri.setUserPort(request.getServerPort()); uri.setUserSessionId(request.getRequestedSessionId()); session=request.getSession(false); session.setAttribute("URI", uri); // request.getSession().setAttribute("URI",uri); System.out.println("URI's username="+uri.getUserName()); return true; } return false; } 终于找到 原因了,是因为我在上面这个方法外,声明并new了这个uri,也就是说uri我声明成这个bean的属性:并在初始值new了一下,如下:package com.tosail.zhts.logon;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.*;import org.apache.struts.action.*;import javax.servlet.http.*;import java.util.*;import javax.sql.*;import com.tosail.zhts.right.*;import com.tosail.database.*;import com.tosail.utility.*;import com.tosail.system.*;import com.tosail.utility.*;public class LogonAction extends Action{ private String userId = ""; UserRightInfo uri = new UserRightInfo(); // 就是这句惹的祸!!!! public ActionForward perform(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String forwardPage = "index"; String forwardLogonPage = "logon"; LogonForm lf = (LogonForm) form; boolean iflogin = false; try { iflogin = doLogin(lf,request); if (iflogin) { DBExecuteBean dbe = new DBExecuteBean(); dbe.executeUpdateSQL(Log.getLogSql(request,Log.LOG_LOGON,Log.LOGON_ZHTS)); SuccessForm sf = new SuccessForm(); sf.setForwardPage(lf.getForwardPage()); System.out.println("forwardPage="+lf.getForwardPage()); sf.setMessage("您已经成功登录!"); request.setAttribute("sf",sf); forwardPage = "success"; } else { ErrorForm ef = new ErrorForm(); ef.setForwardPage(""); ef.setMessage("登录失败!您没有相应权限,请下载需求表,填写好邮给我们。我们将在3个工作日内给你回复!谢谢您的参予。"); request.setAttribute("ef",ef); forwardPage = "error"; } } catch (Exception ex) { System.out.println(ex.toString()); } return (mapping.findForward(forwardPage)); } public boolean doLogin(LogonForm lf,HttpServletRequest request) { String user = ""; String password = ""; user = lf.getUser(); password = lf.getPassword(); if (checkLogin(user,password)) { // doGetRight(uri); uri.setUserIP(request.getRemoteAddr()); uri.setUserPort(request.getServerPort()); uri.setUserSessionId(request.getRequestedSessionId()); request.getSession().setAttribute("URI",uri); return true; } return false; }把UserRightInfo uri = new UserRightInfo(); 改成:UserRightInfo uri =null;就行了。这也说明request.getSession().setAttribute("URI",uri);set时,是传引用,而不是传值!!!问题已经结束!谢谢大家!! tomcat启动时的错误:严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=// 帮忙高考选专业 关于java web知识的学习顺序 听闻Spring很小很强大,初学者来请教了~~ 求一本学JSP的优秀教材 JSP连接不到数据库 求一段用写的注册登陆的代码 关于tomcat JSP中怎样实现ASCII的操作 谁有好的用JSP写的BBS源码,发一份给我,好吗? 关于servlet中的参数行参数读取问题,100分 在程序中怎样将这个过程转换成java程序
[email protected]
回贴时都是用后一个用户的ID回的。
是这种情况,同一台机器,不同的机器都 是这种情况。
首先我讲一下我要用到的概念:
1、由桌面IE图标打开的窗口称为“父窗口”,父窗口与父窗口之间称为“兄弟窗口”
2、由父窗口新弹出的窗口称为“子窗口”
3、由子窗口弹出的窗口称为“孙窗口”,这时这个子窗口也称为孙窗口的父窗口
兄弟窗口之间共享同一个Cookies和Session
子窗口及其产生的孙窗口共享同一个Cookies和Session
由不同父窗口产生的子窗口用的是不同的Cookies和Session
父窗口与其后代窗口用不同的Session和Cookies
如果要解决这个问题你可以用子窗口中实现这个Session,这样就不会相互干挠
我觉得这一点中国工商银行网站做得很好
{
String user = "";
String password = "";
user = lf.getUser();
password = lf.getPassword(); if (checkLogin(user, password))
{
uri.setUserIP(request.getRemoteAddr());
uri.setUserPort(request.getServerPort());
uri.setUserSessionId(request.getRequestedSessionId());
session=request.getSession(false);
session.setAttribute("URI", uri);
// request.getSession().setAttribute("URI",uri);
System.out.println("URI's username="+uri.getUserName());
return true;
}
return false;
}
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.util.*;
import javax.sql.*;
import com.tosail.zhts.right.*;
import com.tosail.database.*;
import com.tosail.utility.*;
import com.tosail.system.*;
import com.tosail.utility.*;public class LogonAction extends Action
{
private String userId = "";
UserRightInfo uri = new UserRightInfo(); // 就是这句惹的祸!!!! public ActionForward perform(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws IOException,
ServletException
{
String forwardPage = "index";
String forwardLogonPage = "logon";
LogonForm lf = (LogonForm) form; boolean iflogin = false;
try
{
iflogin = doLogin(lf,request);
if (iflogin)
{
DBExecuteBean dbe = new DBExecuteBean();
dbe.executeUpdateSQL(Log.getLogSql(request,Log.LOG_LOGON,Log.LOGON_ZHTS));
SuccessForm sf = new SuccessForm();
sf.setForwardPage(lf.getForwardPage());
System.out.println("forwardPage="+lf.getForwardPage());
sf.setMessage("您已经成功登录!");
request.setAttribute("sf",sf);
forwardPage = "success";
}
else
{
ErrorForm ef = new ErrorForm();
ef.setForwardPage("");
ef.setMessage("登录失败!您没有相应权限,请下载需求表,填写好邮给我们。我们将在3个工作日内给你回复!谢谢您的参予。");
request.setAttribute("ef",ef);
forwardPage = "error";
}
}
catch (Exception ex)
{
System.out.println(ex.toString());
}
return (mapping.findForward(forwardPage));
} public boolean doLogin(LogonForm lf,HttpServletRequest request)
{
String user = "";
String password = "";
user = lf.getUser();
password = lf.getPassword(); if (checkLogin(user,password))
{
// doGetRight(uri);
uri.setUserIP(request.getRemoteAddr());
uri.setUserPort(request.getServerPort());
uri.setUserSessionId(request.getRequestedSessionId());
request.getSession().setAttribute("URI",uri);
return true;
}
return false;
}把UserRightInfo uri = new UserRightInfo(); 改成:UserRightInfo uri =null;就行了。
这也说明request.getSession().setAttribute("URI",uri);set时,是传引用,而不是传值!!!
问题已经结束!谢谢大家!!