ajax servlet中的session问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax servlet中的session问题相关的知识,希望对你有一定的参考价值。
我利用ajax方式访问到了一个servlet,在其中用request.getSession的方式获取并设置了Session,但是当我第二次用ajax访问这个servlet时,获取这个session,得到的是一个错误值(随机的),这怎么解决呢,
我换为使用普通的Htpp请求,即直接提交表单,那么这样读取的session是正确的????
谢谢啊
造成这种情况的原因可能是:
1浏览器不支持cookie
2ajax发送的时候信息不完全
你可以尝试
在ajax请求的时候把session的id带回去
获取后台session的id,可以在js用document.cookie获取,至于session的键值,则可以用浏览器的控制台抓包获取(例如,php的session的cookie默认值为PHPSESSIN) 参考技术A session是servlet的属性了还是在方法中获取的session?
Servlet中的cookie和session
保存数据的2中方式
- Cookie
- Session
Cookie
我们可以将一些信息保存到cookie中,cookie存放在对应的浏览器目录里面。每个站点可以保存20个cookie,最大长度不超过4k。同时,由于http协议是明文传输,所以使用cookie的时候存在一些安全性问题。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { Cookie[] cookies = req.getCookies(); boolean usernameFound = false; if(null != cookies) { System.out.println("cookie found"); for(Cookie item : cookies) { System.out.println(item.getName()); if("username".equals(item.getName())) { usernameFound = true; System.out.println("username = " + item.getValue()); break; } } } if(!usernameFound) { System.out.println("没有任何cookie"); Cookie username = new Cookie("username", "Oliver"); resp.addCookie(username); } } catch(Exception exception) { System.out.println("异常:" + Tools.getCurrentTime()); System.out.println(exception); }
}
|
Session
Session通过cookie保存,每个session有一个唯一的ID(通过getId()获取)。默认情况下session过期时间为30分钟,可以通过代码或者配置的方式设置session失效时期,代码优先于配置文件。
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); if(null != session) { System.out.println("session 未过期"); } else { System.out.println("session 过期"); } //设置session失效时间为2分钟 session.setMaxInactiveInterval(60 * 2); session.setAttribute("count", 999); session.invalidate(); } |
|
也可以通过通过部署描述服务配置失效时间web.xml
<session-config> <session-timeout>30</session-timeout> </session-config> |
以上是关于ajax servlet中的session问题的主要内容,如果未能解决你的问题,请参考以下文章
Java5tomcat&servlet,request&response,cookie&session,Filter,maven,mybatis,mvc,ajax&js
无法从 Servlet 过滤器中的 FacesContext 检索 Session
Spring+Session+interceptor+ajax(拦截器)的登陆和退出