HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("username", Muser.getUsername().toString()
.trim());
session.setAttribute("realname", Muser.getName().toString()
.trim());
session.setAttribute("id", Muser.getId().toString().trim());
session.setAttribute("mobilePhone", Muser.getMobialphone()
.toString().trim());
用户退出的时候:remove这些字段
public String logout() throws Exception {
Map session = ActionContext.getContext().getSession();
try {
session.remove("username");
session.remove("realname");
session.remove("id");
System.out.println("退出成功!");
return SUCCESS;
} catch (Exception e) {
return INPUT;
}
}
①但是,我发现写的那个SessionListener,总是提示帐号已登陆,请重复登陆,这样再登陆一次就没问题了,貌似就是退出的时候那执行的有问题。
②如果我修改了session中的值,为什么页面不能及时的反馈,以及判断呢,而是要下次登陆才能及时的更新。
例如: realname 这个字段,登陆的时候,把这个字段存入了session,
然后用户登陆后,更改了这个字段,但是发现在session中的值并没有修改,
而是下次登陆之后才修改。这是因为这还是同一个session的原因吧?请问有好的解决办法没啊 ?
谢谢。
29 个解决方案
#1
Map session = ActionContext.getContext().getSession(false);//
#2
啥意思啊
#3
只读取,不创建新的session。
#4
The method getSession() in the type ActionContext is not applicable for the arguments (boolean)
额,这是个好想法,这个报错呢 谢谢。
#5
Map session =ServletActionContext.getRequest().getSession(false);
#6
额,我刚才Debug了下,登陆的那个session的值和我退出登陆的
Map session = ActionContext.getContext().getSession();
这个里面的session是一样的,并没有创建新的session。
所以还是同一个session
。我打算重写那个重复登陆判断的方法了。
另外问题②有好的解决方法吗?谢谢。
#7
让 session 强制过期!!
#8
1.你退出时是不是少删一个session属性叫“mobilePhone”的?
2.我们一般登录时先要判断session中是否已有用户属性。你这个简单,直接先判断session是否为空就行。
if(session == null){
//执行你添加属性的操作
}else{
//已登录状态
}
3.发表点个人意见...
像你这种session,退出时完全可以用getSession().clear()方法直接清空。
还有,为什么不把你的这些属性封装成一个user对象呢?以后设置session时只要传一个对象就搞定,很方便的。
2.我们一般登录时先要判断session中是否已有用户属性。你这个简单,直接先判断session是否为空就行。
if(session == null){
//执行你添加属性的操作
}else{
//已登录状态
}
3.发表点个人意见...
像你这种session,退出时完全可以用getSession().clear()方法直接清空。
还有,为什么不把你的这些属性封装成一个user对象呢?以后设置session时只要传一个对象就搞定,很方便的。
#9
额,请问第②点该怎么做呢,谢谢。
#10
额,谢谢,您提的一件非常有道理。接下来我就打算这么改,呵呵,另外问下,
①把我添加的那些session信息封装成,user对象,是不是要new 一个user信息呢?这个user会不会和当前用户冲突呢?
②如果我修改了session中的值,为什么页面不能及时的反馈,以及判断呢,而是要下次登陆才能及时的更新。
例如: realname 这个字段,登陆的时候,把这个字段存入了session,
然后用户登陆后,更改了这个字段,但是发现在session中的值并没有修改,
而是下次登陆之后才修改。这是因为这还是同一个session的原因吧?请问有好的解决办法没啊 ?
谢谢。
#11
还有 用 HttpSession session = ServletActionContext.getRequest().getSession();//这个是我登录的时候用。
和Map session = ActionContext.getContext().getSession();//这个是注销,以及其他用。
这没啥区别吧?
#12
没差,依我看HttpSession 就是一个设定了泛型的map<String, Object>。
问题怎么样,解决了没啊
问题怎么样,解决了没啊
#13
你能提供你怎么判断用户已登录的代码或逻辑不?
#14
额,刚才没看到你10楼的问题。
1.你应该已经有一个名叫user的javabean吧?如果没有,创建一个,属性按需要添加。
例如:当你需要存入session时,这样做:
User u = new User(name, age, info);//实例化一个user,把登录信息注入
session.setAttribute("u", u);//这能看懂吧。。。存入session。
搞定。
2.第二个问题稍等,我有空时实验看看是不是你说的情况。
1.你应该已经有一个名叫user的javabean吧?如果没有,创建一个,属性按需要添加。
例如:当你需要存入session时,这样做:
User u = new User(name, age, info);//实例化一个user,把登录信息注入
session.setAttribute("u", u);//这能看懂吧。。。存入session。
搞定。
2.第二个问题稍等,我有空时实验看看是不是你说的情况。
#15
接楼上。
第二个问题我刚试了一下,见下:
private ActionContext ctx = ActionContext.getContext();//得到session
public String test() {
System.out.println(ctx.getSession().isEmpty());//看是否为空
ctx.getSession().put("user", "dai");//添加值
ctx.getSession().put("user", "xiaoyi");//修改值
System.out.println(ctx.getSession().get("user"));//打印值
return SUCCESS;
}
打印出的是:
true
xiaoyi
由此可得:session是实时更新的。至于你的session没有更新,可能是
1.你给session重新设值时出错。
2.你获取session时出错。
学长只能帮你到这了。
第二个问题我刚试了一下,见下:
private ActionContext ctx = ActionContext.getContext();//得到session
public String test() {
System.out.println(ctx.getSession().isEmpty());//看是否为空
ctx.getSession().put("user", "dai");//添加值
ctx.getSession().put("user", "xiaoyi");//修改值
System.out.println(ctx.getSession().get("user"));//打印值
return SUCCESS;
}
打印出的是:
true
xiaoyi
由此可得:session是实时更新的。至于你的session没有更新,可能是
1.你给session重新设值时出错。
2.你获取session时出错。
学长只能帮你到这了。
#16
#17
向session中存放值的时候如果名字一样,后者会覆盖前者;你上面说的realname没有及时更新的问题,我想问下,你修改的过有没有重新替换下session中之前的realname。
#18
恩,谢谢,前面的问题都解决了,
后面的那个session更新的,还是没能解决呢。,
页面上那个获取的还是没更新之前的值。
#19
把你引用的那段代码贴出来看看。
#20
<c:if test="${session.teamState=='未审核'}">
<Strong><font color="red"> 预约之前请提交预约申请,然后等待导师审核。</font>
</Strong>
如果没有提交申请,请在个人中心处申请.
</c:if>
这就是就是页面的那段代码 ${session.teamState} 输出的也是修改之前的值,有说是缓存的问题,但是我
加了清理缓存的代码,还是不行。
<%
// 这三句话只是为了防止浏览器缓存
response.setHeader("Cache-Control", "no-cache, no-store"); //HTTP 1.1
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 0); //prevents caching at the proxy server
%>
#21
1.确定你jsp页面取session的时候是在session更新之后。不然就白忙活了。。。
2.response.flushBuffer();jsp里加上这个方法试试。
2.response.flushBuffer();jsp里加上这个方法试试。
#22
登陆的时候,把值存入了session,
页面只是获取session的值,jsp取session咋能保证他取到更新后的sessin的值呢,
是不是要重新获取session的值
#23
更新过当然要重新获取session才行了。就好像我整容前你认识我,但是整容之后,我肯定要向你自我介绍了你才知道是我啊。
你没有重新获取么。。。?
#24
额,没有重新获取呢,咋重新获取啊,
难不成真要重新登陆嘛?呵呵,谢谢。
#25
struts中更新完session,直接跳转到之前的jsp(等于是刷新了),顺理成章一气呵成。
#26
在sessionRemove方法下面调用一下invalidate()方法,来注销session。
#27
如果我修改了session中的值,为什么页面不能及时的反馈,以及判断呢,而是要下次登陆才能及时的更新。
例如: realname 这个字段,登陆的时候,把这个字段存入了session,
然后用户登陆后,更改了这个字段,但是发现在session中的值并没有修改,
而是下次登陆之后才修改。这是因为这还是同一个session的原因吧?请问有好的解决办法没啊 ?
谢谢。
#28
额,我不是更新session 是更新那个session中的字段,额,要不这样,更新那个字段了再更新下session,。
可能跟session的生命周期有关系吧。
#29
光更新字段没用啊,session里还是原来那东西。
就好像我写信告诉你我整容了,但你还是只认识整容前的我一样。
必须要重新session.put(...)才行啊,多想想session的用法。
#1
Map session = ActionContext.getContext().getSession(false);//
#2
啥意思啊
#3
只读取,不创建新的session。
#4
The method getSession() in the type ActionContext is not applicable for the arguments (boolean)
额,这是个好想法,这个报错呢 谢谢。
#5
Map session =ServletActionContext.getRequest().getSession(false);
#6
额,我刚才Debug了下,登陆的那个session的值和我退出登陆的
Map session = ActionContext.getContext().getSession();
这个里面的session是一样的,并没有创建新的session。
所以还是同一个session
。我打算重写那个重复登陆判断的方法了。
另外问题②有好的解决方法吗?谢谢。
#7
让 session 强制过期!!
#8
1.你退出时是不是少删一个session属性叫“mobilePhone”的?
2.我们一般登录时先要判断session中是否已有用户属性。你这个简单,直接先判断session是否为空就行。
if(session == null){
//执行你添加属性的操作
}else{
//已登录状态
}
3.发表点个人意见...
像你这种session,退出时完全可以用getSession().clear()方法直接清空。
还有,为什么不把你的这些属性封装成一个user对象呢?以后设置session时只要传一个对象就搞定,很方便的。
2.我们一般登录时先要判断session中是否已有用户属性。你这个简单,直接先判断session是否为空就行。
if(session == null){
//执行你添加属性的操作
}else{
//已登录状态
}
3.发表点个人意见...
像你这种session,退出时完全可以用getSession().clear()方法直接清空。
还有,为什么不把你的这些属性封装成一个user对象呢?以后设置session时只要传一个对象就搞定,很方便的。
#9
额,请问第②点该怎么做呢,谢谢。
#10
额,谢谢,您提的一件非常有道理。接下来我就打算这么改,呵呵,另外问下,
①把我添加的那些session信息封装成,user对象,是不是要new 一个user信息呢?这个user会不会和当前用户冲突呢?
②如果我修改了session中的值,为什么页面不能及时的反馈,以及判断呢,而是要下次登陆才能及时的更新。
例如: realname 这个字段,登陆的时候,把这个字段存入了session,
然后用户登陆后,更改了这个字段,但是发现在session中的值并没有修改,
而是下次登陆之后才修改。这是因为这还是同一个session的原因吧?请问有好的解决办法没啊 ?
谢谢。
#11
还有 用 HttpSession session = ServletActionContext.getRequest().getSession();//这个是我登录的时候用。
和Map session = ActionContext.getContext().getSession();//这个是注销,以及其他用。
这没啥区别吧?
#12
没差,依我看HttpSession 就是一个设定了泛型的map<String, Object>。
问题怎么样,解决了没啊
问题怎么样,解决了没啊
#13
你能提供你怎么判断用户已登录的代码或逻辑不?
#14
额,刚才没看到你10楼的问题。
1.你应该已经有一个名叫user的javabean吧?如果没有,创建一个,属性按需要添加。
例如:当你需要存入session时,这样做:
User u = new User(name, age, info);//实例化一个user,把登录信息注入
session.setAttribute("u", u);//这能看懂吧。。。存入session。
搞定。
2.第二个问题稍等,我有空时实验看看是不是你说的情况。
1.你应该已经有一个名叫user的javabean吧?如果没有,创建一个,属性按需要添加。
例如:当你需要存入session时,这样做:
User u = new User(name, age, info);//实例化一个user,把登录信息注入
session.setAttribute("u", u);//这能看懂吧。。。存入session。
搞定。
2.第二个问题稍等,我有空时实验看看是不是你说的情况。
#15
接楼上。
第二个问题我刚试了一下,见下:
private ActionContext ctx = ActionContext.getContext();//得到session
public String test() {
System.out.println(ctx.getSession().isEmpty());//看是否为空
ctx.getSession().put("user", "dai");//添加值
ctx.getSession().put("user", "xiaoyi");//修改值
System.out.println(ctx.getSession().get("user"));//打印值
return SUCCESS;
}
打印出的是:
true
xiaoyi
由此可得:session是实时更新的。至于你的session没有更新,可能是
1.你给session重新设值时出错。
2.你获取session时出错。
学长只能帮你到这了。
第二个问题我刚试了一下,见下:
private ActionContext ctx = ActionContext.getContext();//得到session
public String test() {
System.out.println(ctx.getSession().isEmpty());//看是否为空
ctx.getSession().put("user", "dai");//添加值
ctx.getSession().put("user", "xiaoyi");//修改值
System.out.println(ctx.getSession().get("user"));//打印值
return SUCCESS;
}
打印出的是:
true
xiaoyi
由此可得:session是实时更新的。至于你的session没有更新,可能是
1.你给session重新设值时出错。
2.你获取session时出错。
学长只能帮你到这了。
#16
#17
向session中存放值的时候如果名字一样,后者会覆盖前者;你上面说的realname没有及时更新的问题,我想问下,你修改的过有没有重新替换下session中之前的realname。
#18
恩,谢谢,前面的问题都解决了,
后面的那个session更新的,还是没能解决呢。,
页面上那个获取的还是没更新之前的值。
#19
把你引用的那段代码贴出来看看。
#20
<c:if test="${session.teamState=='未审核'}">
<Strong><font color="red"> 预约之前请提交预约申请,然后等待导师审核。</font>
</Strong>
如果没有提交申请,请在个人中心处申请.
</c:if>
这就是就是页面的那段代码 ${session.teamState} 输出的也是修改之前的值,有说是缓存的问题,但是我
加了清理缓存的代码,还是不行。
<%
// 这三句话只是为了防止浏览器缓存
response.setHeader("Cache-Control", "no-cache, no-store"); //HTTP 1.1
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 0); //prevents caching at the proxy server
%>
#21
1.确定你jsp页面取session的时候是在session更新之后。不然就白忙活了。。。
2.response.flushBuffer();jsp里加上这个方法试试。
2.response.flushBuffer();jsp里加上这个方法试试。
#22
登陆的时候,把值存入了session,
页面只是获取session的值,jsp取session咋能保证他取到更新后的sessin的值呢,
是不是要重新获取session的值
#23
更新过当然要重新获取session才行了。就好像我整容前你认识我,但是整容之后,我肯定要向你自我介绍了你才知道是我啊。
你没有重新获取么。。。?
#24
额,没有重新获取呢,咋重新获取啊,
难不成真要重新登陆嘛?呵呵,谢谢。
#25
struts中更新完session,直接跳转到之前的jsp(等于是刷新了),顺理成章一气呵成。
#26
在sessionRemove方法下面调用一下invalidate()方法,来注销session。
#27
如果我修改了session中的值,为什么页面不能及时的反馈,以及判断呢,而是要下次登陆才能及时的更新。
例如: realname 这个字段,登陆的时候,把这个字段存入了session,
然后用户登陆后,更改了这个字段,但是发现在session中的值并没有修改,
而是下次登陆之后才修改。这是因为这还是同一个session的原因吧?请问有好的解决办法没啊 ?
谢谢。
#28
额,我不是更新session 是更新那个session中的字段,额,要不这样,更新那个字段了再更新下session,。
可能跟session的生命周期有关系吧。
#29
光更新字段没用啊,session里还是原来那东西。
就好像我写信告诉你我整容了,但你还是只认识整容前的我一样。
必须要重新session.put(...)才行啊,多想想session的用法。