jfinal session获取不了值

佰亿互联 发布于 2013/07/24 19:05
阅读 2K+
收藏 3
为什么我的session获取不了值


public void execute() {
	Member member = Member.dao.findFirst("select * from t_member");
	if (null != member) {
		setSessionAttr("member", member);
		redirect("/");
	} else {
		render("index.jsp");
	}
}
我在这步设置了,debug模式下检查session中已经有值了。


public void status() {
	Member member = getSessionAttr("member");
	if (null != member) {
		renderHtml(member.getStr("first_name") + " " + member.getStr("last_name"));
	} else {
		renderHtml("<a href=\"/member/login\">Sign In</a>or<a href=\"/member/register\">Join Free</a>");
	}
}

但是在这步就是获取不到session中的值,debug下session为空。


public void configInterceptor(Interceptors me) {
    me.add(new SessionInViewInterceptor());
}
也设置全局session拦截器。

求解!
加载中
0
佰亿互联
佰亿互联

问题已解决:由于项目中在创建自定义标签时使用了HttpURLConnection对象访问请求,以致于session每次都会重新生成,所以会出现以上情况。

解决办法是保存session对象,其中关键代码是:

conn.setRequestMethod("GET" );
conn.setDoOutput(true);
conn.setRequestProperty("Cookie", "JSESSIONID=" + pageContext.getSession().getId());
conn.connect();
0
2
20130716
看看这个就明白了,http://www.oschina.net/question/582302_59626 
0
佰亿互联
佰亿互联

引用来自“Adam.ZLQ”的答案

问题已解决:由于项目中在创建自定义标签时使用了HttpURLConnection对象访问请求,以致于session每次都会重新生成,所以会出现以上情况。

解决办法是保存session对象,其中关键代码是:

conn.setRequestMethod("GET" );
conn.setDoOutput(true);
conn.setRequestProperty("Cookie", "JSESSIONID=" + pageContext.getSession().getId());
conn.connect();

补充一下,使用下面代码可以保存所有的Cookie:

//保存Cookie
conn.setRequestMethod("GET" );
conn.setDoOutput(true);		
conn.setRequestProperty("Cookie", getCookies(request.getCookies()));
conn.connect();

private String getCookies(Cookie[] cookies) {
    StringBuilder sb = new StringBuilder();
    for(Cookie cookie : cookies) {
        sb.append(cookie.getName());
        sb.append("=");
        sb.append(cookie.getValue());
        sb.append(";");
    }
    return sb.toString();
}

返回顶部
顶部