在登录action(我用的是动态action form)中,将一段字符写入session ,想通过他,在其他action中判断其值,来确定该用户的网页是否过期,可是在其他action中,他的值是null,如何在其他action中得到在某个action中设置的session值?
关键代码如下:
登录action中,DynaActionForm dyform=(DynaActionForm)form;
              String aa=(String)dyform.get("password");
              HttpSession session=request.getSession();
              session("mmk",aa);
在这个action中,可以用String aaaq=(String)session.getAttribute("mmk");
                     System.out.print(aaaq);
看见写入的session值,比如"123"
然而在其他的action中,使用如下代码确得不到该值(该值为null)
                DynaActionForm dyform=(DynaActionForm)form;
                HttpSession session=request.getSession();
       System.out.println(session.getAttribute("mmk"));
为什么?
struts-config.xml中这样写的<action path="/login" type="proj.LoginAction" name="formBean1" scope="session" validate="true" input="/error.jsp"/>
其中scrope换成request,结果一样session无效

解决方案 »

  1.   

    session("mmk",aa);
    没有见过这样的写法,应该是session.setAttribute("mmk", aa);
    另外看看是不是由于你的容器session失效时间设置的太短了。
      

  2.   

    session("mmk",aa);
    没见过这么写的
      

  3.   

    session("mmk",aa);
    sorry我是这样写的session.setAttribute("mmk", aa);
    失效时间设置的是20分钟,
    session-config>
    <session-timeout>20</session-timeout>
    </session-config>
      

  4.   

    <session-config>
    <session-timeout>20</session-timeout>
    </session-config>
      

  5.   

    是不是你向session中设置值的action还没有被调用啊
      

  6.   

    (String)session.getAttribute("mmk")不是得到名为mmk的session的值吗?System.out.println((String)session.getAttribute("mmk"));结果是null啊
      

  7.   

    我以上帝的名义告诉你aa不是空值,实际应用中在第一个登录action中aa是ttt123,
    而且可以从输出String aaaq=(String)session.getAttribute("mmk");
                         System.out.print(aaaq);
    中看见,当时的mmk中值是ttt123而在另一个跳转页面的action中mmk就是null了,
      

  8.   

    session变了?
    试试第一个Action中get一下sessionId
    第二个Action中也get一下sessionId,然后比较一下是否相同
      

  9.   

    而且我还试过,将mmk改名为其他(怀疑mmk重名,被重写)任意名,结果一样。而且,在登录的action中设置了20多个session,在从登录页面向其他页面(jsp)跳转后,这些session在其他页面里都正常输出了自己的值,可是这些session值在任何其他action中使用上面的方法,读出的值均为null,我估计使用HttpSession session=request.getSession();
           System.out.println(session.getAttribute("mmk"));读session的值时,系统自动生成了一个新空session,名为mmk,值当然为null了,主要怀疑上面部句的容器request使用有误,可是我不知如何写那2句。
    我个人认为,session在设置后,只要不退出应用(关闭IE),不重写session,session值应该是全局可用的(各个jsp,action中均可用,并且是不变的,是这样的吗?
      

  10.   

    我的session值不是从页面传到应用action的,我是在登录action中设置了session值,我其他action中直接访问的,不是将该session值先传到某个页面,再从该页面传到action中的,有这个必要吗?
      

  11.   


    HttpSession session=request.getSession(false);
    试一下
      

  12.   

    HttpSession session=request.getSession(false);在看看session这里的session的值取到没有!
    如果在整个会话周期都需要访问的信息你可以放在session,如果仅仅是页面之间的数据传递没有必要放在session中!
      

  13.   

    HttpSession session=request.getSession(false);
    if(session==null){
      System.out.println("session lose");
    }试试这个会出现么?如果出现的话,找一下你有没有地方有代码把session清空或是扔掉了
      

  14.   

    if(session==null){
      System.out.println("session lose");
    }
    ---------------------------------
    无输出,说明session不是空,如何把现在的20多session内容全部输出??????我想看看
      

  15.   

    session肯定不会为空的,只要与服务器建立了连接,就会有一个会话
      

  16.   

    我系列字母的问题就是:
    如何在其他action中得到在某个action中设置的session值?
    比如在A action中设置了session("asd","i am session");
    在B  action中如何得到名为asd,内容是i am session的session
      

  17.   

    sorry 我现在的问题就是:如上
      

  18.   

    还是认为session变了你试试打印两个.do的sessionId看看是否相同先
      

  19.   

    mmk 这个session属性有没有在第二个action执行前被remove掉?建议写一个HttpSessionAttributeListener 监听一下session中属性的add,remove行为
      

  20.   

    你是不是用了request.sendredirect了?
      

  21.   

    肯定是request没有作为参数传递给action~
      

  22.   

    我是这样作的
    在登录action中设置2个session ,A100和mmk,在登录通过的界面M中,使用<a href="az.jsp">主机</a> ,在az.jsp中使用<%String bb=(String)session.getAttribute("A100") System.out.println(bb);%>可以得到A100的值,而在界面M中,使用<a href="ap.do>配件</a>在点击《配件》连接时,希望执行一个.do操作,在该操作的响应处理action中,通过判断mmk的值来确定是否过期,可是无论我如何做,A100和mmk在这里使用上面方法得到的值都是空null,不解???
      

  23.   

    在登录action中设置2个session ,A100和mmk,在登录通过的界面M中,使用<a href="az.jsp">主机</a> ,在az.jsp中使用<%String bb=(String)session.getAttribute("A100") System.out.println(bb);%>可以得到A100的值,而在界面M中,使用<a href="ap.do>配件</a>在点击《配件》连接时,希望执行一个.do操作,在该操作的响应处理action中,通过判断 mmk的值来确定是否过期,可是无论我如何做,A100和mmk在这里使用上面方法得到的值都是空null,
    ----------------------------------------------------------------------------------
    不知道lz在说什么
      

  24.   

    我说的是在登录成功后,进入的页面中有2个连接1.整机 2.配件,点击"整机"连接进入一个jsp界面,该界面是用登录检验action 产生的session (A100)的值填充的,一切正常,第二个"配件连接"点击后,执行一个ap.do的操作,在ap.do的action中希望得到session(mmk)的值,可是在这个action中,得到的mmk或A100都是空(null),不解,如何在这个action中得到登录action中设置的mmk和A100的值??????
      

  25.   

    试试这个吧
    设置
    String user = "123";
    request.getSession().setAttribute("userName",user);取得
    (String)request.getSession().getAttribute("userName");
      

  26.   

    楼主,你看看是不是有的地方,你习惯性地用ASP的语法来写了。 HttpSession session=request.getSession();我怀疑你这个request是不是HttpServletRequest对象,试试改为HttpServletRequest.getSession();
      

  27.   

    在jsp中,可以直接用request, session对象,但在actionForm或formBean中,是要引用javax.servlet包下的对象的。