JSP中得session

(1)Duplicate local variable session,

顾名思义,就是重复的局部变量session。也就是说在你写的页面中,已经存在了一个session。那么问题来了,这个session在哪里呢?

查了资料,找到了JSP中有9个隐含对象,分为4类:
1、输入输出对象 : HttpServletRequest的request, HttpServletResponse的response, JspWriter的out;
2、作用域通信对象 : HttpSession的session, ServletContext的application, PageContext的pageContext;
3、servlet对象 : Object的page, ServletConfig的config;
4、错误对象 : Throwable的exception;

在我的jsp页面中,写的代码是:
HttpSession session = (HttpSession)request.getSession(true);

session.setAttribute("userid", userid);

结果在第一个session下面出现了红色的波浪线,并提示错误Duplicate local variable session。

这个问题的原因应该是:默认的情况下,注意如果JSP没有显示的使用 <% @page session="false"%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。也就是说,我的jsp文件中已经存在了一个session对象,在创建一个当然会出现问题。如果你实在想在创建一个session的话,可以考虑重新命名。比如session1,session2。。。。。等。。。。


(2)session销毁

要怎么才能真正的将session销毁掉呢?看看下面的办法:

        在登录页面上加上一段代码:

request.getSession().invalidate();//清空session

Cookie cookie = request.getCookies()[0];//获取cookie

cookie.setMaxAge(0);//让cookie过期

然后用户再输入信息登录时,就会产生一个新的session了。

        虽然我的系统里面没有使用cookie,但是只要是web系统就离不开cookie。系统里面没有使用cookie是我没有用cookie来保存数据、标示用户等等。但是服务器跟踪会话状态就是用的cookie。既然cookie是服务器用来跟踪会话状态的,那么如果cookie过期了,会怎么样?--不用解释了吧。回答了这个问题,怎么让会话真正被销毁也就不难回答了。

        我在登陆页面上加的那段代码的作用就是,将用户进入登陆页面时所产生的会话也就是session清空,然后让跟踪这个会话的cookie过期,这样服务器就不再掌握有关这个会话的任何信息了。要想与服务器继续通信,就要产生一个新的会话才行。于是会话标示就更新了!

问题就是这么解决的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值