session为空的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了session为空的问题相关的知识,希望对你有一定的参考价值。

假如我有两个页面,一个登录的,一个登录成功的,登录的代码已经写出,但是在登录成功的这个页面,代码为错,说赋值为空,代码如下
protected void Page_Load(object sender, EventArgs e)

Label1.Text = Session["name"].ToString();
Label2.Text = Session["pswd"].ToString();

不知道哪错了,应该是Session对象为空,但不知道怎么解决

我猜你是登陆成功后才跳到登陆成功页面的吧?在登陆是否成功后保存登陆名Session["name"]="xxx";跳转到登陆成功页面后用Session["name"]获取,另外,你应该在Page_Load事件中加上一个条件if(!IsPostBack) //do something;,很多错误都是因为缺少这个条件产生的.. 参考技术A 你先定义一个变量接受session的值看看到底是不是空。

使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误

我的百度知道回答,感觉这个知识很有意义,专门贴出来。

不过还有待验证的地方,就是

ActionContext.getContext().getSession("name", "Tom");
//如果在JSP中通过 EL 或者 Struts2 标签怎么显示?

以下是回答正文。

 


 

 

很多初学Java Web的同学因为使用 Strut2框架而分不清两个 Session的区别。

1.   JSP/Servlety有个原生的 session 对象,这是9大内置对象中的一个,书上写的都有,都记得。类型是 HttpSession session;  函数方法是 setAttribute(),getAttribute(),用法如下

//java 保存至原生session对象中
ServletActionContext.getRequest().getSession().setAttribute("myStr",myStr);
//jsp 取值
用struts标签: <s:property value="#session.myStr" />
用EL表达式:${sessionScope.myStr}
用JSP代码:<%=session.getAttribute("myStr")%>

 

2.  若是项目使用了Struts2框架,Struts2自己也封装了个 session,这个 session是个 Map类型的对象。所以和 Map 用法一样的,使用 put 存值,get 取值。用法是:

//java 保存至struts2 session
ActionContext.getContext().getSession().put("user", user);
//jsp 页面读取
用struts标签: <s:property value="#session.hello" />
用EL表达式:${hello}
用java代码:<%=session.getAttribute("hello")%>

 

 

很多人说session为什么无法取出值呢?看看他们的代码,你觉得这对么?

//错误代码示例:
//Action
Map<String, Object> session=ActionContext.getContext().getSession();
session.put("name","Tom");
//JSP
他的名字叫做 <%=session.getAttribute("name")%>

/*
这明显犯了分不清2个session的错误。Action中你是放在 Struts2框架封装的session(其实是个Map)中去了,而JSP中,你却又读取原生的session。根本不是一个东西。
*/

//正确写法
//Action
//必须是从 request对象中获得 原生的HttpSession类型的session
//原生sessiond的方法是 setAttribute和 getAttribute,不是put,set
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("name","Tom");
//JSP
他的名字叫做 <%=session.getAttribute("name")%>

 

 

使用上面的代码,注意import 相应的类库。

以上是关于session为空的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误

session 在生成的文件之外始终为空

Application Insights - ASP.NET Core - Session_Id 为空

java中,我在后台action中设置了session的值,webservice中得到session,但是里面是空的。

为什么我的SESSION数组在一页上可以,但在另一页上可以为空?

如何查看oracle当前session信息