作者:浪子一品香_938 | 来源:互联网 | 2023-01-23 17:20
在登录action(我用的是动态actionform)中,将一段字符写入session,想通过他,在其他action中判断其值,来确定该用户的网页是否过期,可是在其他action中,他的值是nul
在登录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中这样写的
其中scrope换成request,结果一样session无效
32 个解决方案
session("mmk",aa);
没有见过这样的写法,应该是session.setAttribute("mmk", aa);
另外看看是不是由于你的容器session失效时间设置的太短了。
session("mmk",aa);
没见过这么写的
session("mmk",aa);
sorry我是这样写的session.setAttribute("mmk", aa);
失效时间设置的是20分钟,
session-config>
20
(String)session.getAttribute("mmk")不是得到名为mmk的session的值吗?System.out.println((String)session.getAttribute("mmk"));结果是null啊
我以上帝的名义告诉你aa不是空值,实际应用中在第一个登录action中aa是ttt123,
而且可以从输出String aaaq=(String)session.getAttribute("mmk");
System.out.print(aaaq);
中看见,当时的mmk中值是ttt123
而在另一个跳转页面的action中mmk就是null了,
session变了?
试试第一个Action中get一下sessionId
第二个Action中也get一下sessionId,然后比较一下是否相同
而且我还试过,将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中均可用,并且是不变的,是这样的吗?
我的session值不是从页面传到应用action的,我是在登录action中设置了session值,我其他action中直接访问的,不是将该session值先传到某个页面,再从该页面传到action中的,有这个必要吗?
用
HttpSession session=request.getSession(false);
试一下
HttpSession session=request.getSession(false);在看看session这里的session的值取到没有!
如果在整个会话周期都需要访问的信息你可以放在session,如果仅仅是页面之间的数据传递没有必要放在session中!
HttpSession session=request.getSession(false);
if(session==null){
System.out.println("session lose");
}
试试这个会出现么?
如果出现的话,找一下你有没有地方有代码把session清空或是扔掉了
if(session==null){
System.out.println("session lose");
}
---------------------------------
无输出,说明session不是空,如何把现在的20多session内容全部输出??????我想看看
session肯定不会为空的,只要与服务器建立了连接,就会有一个会话
我系列字母的问题就是:
如何在其他action中得到在某个action中设置的session值?
比如在A action中设置了session("asd","i am session");
在B action中如何得到名为asd,内容是i am session的session
还是认为session变了
你试试打印两个.do的sessionId看看是否相同先
lz
麻烦你不要让大家猜谜好不好
如果是你写的那样,根本就没问题
如果出现这种情况,只能是你别的地方搞错了
mmk 这个session属性有没有在第二个action执行前被remove掉?
建议写一个HttpSessionAttributeListener 监听一下session中属性的add,remove行为
你是不是用了request.sendredirect了?
肯定是request没有作为参数传递给action~
我说的是在登录成功后,进入的页面中有2个连接1.整机 2.配件,点击"整机"连接进入一个jsp界面,该界面是用登录检验action 产生的session (A100)的值填充的,一切正常,第二个"配件连接"点击后,执行一个ap.do的操作,在ap.do的action中希望得到session(mmk)的值,可是在这个action中,得到的mmk或A100都是空(null),不解,如何在这个action中得到登录action中设置的mmk和A100的值??????
试试这个吧
设置
String user = "123";
request.getSession().setAttribute("userName",user);
取得
(String)request.getSession().getAttribute("userName");
遇到了同楼主同样的问题!正在寻求方法!密切关注中!
楼主,你看看是不是有的地方,你习惯性地用ASP的语法来写了。
HttpSession session=request.getSession();
我怀疑你这个request是不是HttpServletRequest对象,试试改为HttpServletRequest.getSession();
在jsp中,可以直接用request, session对象,但在actionForm或formBean中,是要引用javax.servlet包下的对象的。