java session的使用
2014-03-14 10:56
323 查看
转载自:http://hi.baidu.com/chen_767/item/8a769a72004bb846ef1e53f2
1. session的原理
request对象有个方法是getSession()
首先看浏览器是否发送了Cookie (JSESSIONID) ,如果发了,拿着id去内存中找对应的session对象返回
如果没有发Cookie或者没找到对应的Session对象,创建一个新的Session对象
getSession( boolean create)
create 为true的时候,如果内存有session就返回,没有就创建新的
create为false的时候,意味着只查找不创建,有就返回,没有不创建,返回null;
2. session的运行要依靠cookie来发送JSESSIONID
如果想让多个浏览器共享一个session,我们就需要人工发送Cookie,并设置Cookie的有效时间
3.如果浏览器禁用Cookie,那么Session也玩不起来了
浏览器禁用Cookie
要想让session好用,就需要在页面跳转时发送sessionid
有一个技术url重写
重写后的地址会在原有的url地址的基础上加上JSESSIONID
如果是超链接或表单提交的地址,重写方式如下:
String newUrl = response.encodeURL(url);
如果是请求重定向的地址,方式如下:
String newUrl = response.encodeRedirectURL(url);
-------下面示例: 通过session传递参数 -------
SessionDemo1.java:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// request.setCharacterEncoding("utf-8");
// 如果浏览器没有把session发给服务器,则下面的代码会创建一个新的
// session, 如果浏览器发来的cookie中有JSESSIONID则获得这个session
HttpSession session = request.getSession();
// 使用下面的url
// http://localhost:8180/myweb/SessionDemo1?name=111
// 访问服务器后,服务器通过getParameter获得name这个参数对应的值111
String name = request.getParameter("name");
// session 也是一个域对象 获得请求参数 name 的值存入 session 域
session.setAttribute("name", name);
// 请求重定向到 SessionDemo2
response.sendRedirect("/myweb/SessionDemo2");
// 如果刚才request.getSession()创建了新的JSESSIONID cookie后,服务器会自动
// 将JSESSIONID cookie发给浏览器, 如果刚才用的是浏览器发来的JSESSIONID cookie
// ,则来再给浏览器发JSESSIONID cookie
// 如果是创建了新的JSESSIONID cookie的情况: 浏览器在收到新JSESSIONID cookie后,
// 才去带着这个 JSESSIONID cookie去访问"/myweb/SessionDemo2"页面
}
SessionDemo2.java:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// response.setContentType("text/html;charset=utf-8");
// 获得 session 对象
HttpSession sesstion = request.getSession(false);
if (sesstion == null)// 说明浏览器没有访问SessionDemo1就直接访问了SessionDemo2,所以没有session
return;
// 从 session 域中取出name
String name = (String) sesstion.getAttribute("name");
response.getWriter().println("name:");
response.getWriter().write("name=" + name);
}
1. session的原理
request对象有个方法是getSession()
首先看浏览器是否发送了Cookie (JSESSIONID) ,如果发了,拿着id去内存中找对应的session对象返回
如果没有发Cookie或者没找到对应的Session对象,创建一个新的Session对象
getSession( boolean create)
create 为true的时候,如果内存有session就返回,没有就创建新的
create为false的时候,意味着只查找不创建,有就返回,没有不创建,返回null;
2. session的运行要依靠cookie来发送JSESSIONID
如果想让多个浏览器共享一个session,我们就需要人工发送Cookie,并设置Cookie的有效时间
3.如果浏览器禁用Cookie,那么Session也玩不起来了
浏览器禁用Cookie
要想让session好用,就需要在页面跳转时发送sessionid
有一个技术url重写
重写后的地址会在原有的url地址的基础上加上JSESSIONID
如果是超链接或表单提交的地址,重写方式如下:
String newUrl = response.encodeURL(url);
如果是请求重定向的地址,方式如下:
String newUrl = response.encodeRedirectURL(url);
-------下面示例: 通过session传递参数 -------
SessionDemo1.java:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// request.setCharacterEncoding("utf-8");
// 如果浏览器没有把session发给服务器,则下面的代码会创建一个新的
// session, 如果浏览器发来的cookie中有JSESSIONID则获得这个session
HttpSession session = request.getSession();
// 使用下面的url
// http://localhost:8180/myweb/SessionDemo1?name=111
// 访问服务器后,服务器通过getParameter获得name这个参数对应的值111
String name = request.getParameter("name");
// session 也是一个域对象 获得请求参数 name 的值存入 session 域
session.setAttribute("name", name);
// 请求重定向到 SessionDemo2
response.sendRedirect("/myweb/SessionDemo2");
// 如果刚才request.getSession()创建了新的JSESSIONID cookie后,服务器会自动
// 将JSESSIONID cookie发给浏览器, 如果刚才用的是浏览器发来的JSESSIONID cookie
// ,则来再给浏览器发JSESSIONID cookie
// 如果是创建了新的JSESSIONID cookie的情况: 浏览器在收到新JSESSIONID cookie后,
// 才去带着这个 JSESSIONID cookie去访问"/myweb/SessionDemo2"页面
}
SessionDemo2.java:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// response.setContentType("text/html;charset=utf-8");
// 获得 session 对象
HttpSession sesstion = request.getSession(false);
if (sesstion == null)// 说明浏览器没有访问SessionDemo1就直接访问了SessionDemo2,所以没有session
return;
// 从 session 域中取出name
String name = (String) sesstion.getAttribute("name");
response.getWriter().println("name:");
response.getWriter().write("name=" + name);
}
相关文章推荐
- 使用xmlhttp和Java session监听改善站内消息系统(转)
- java session HttpSessionListener、HttpSessionBindingListener使用区别,实现在线人数统计以及踢出用户
- java中如何使用session
- JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解
- java使用session和cookie
- 关于java中使用Session时出现空指针异常的问题
- 在DWR调用的java代码中使用Session,Request,Response等
- 【JAVA学习】struts2的action中使用session的方法
- java session 的使用和对状态的保存
- java中使用session
- java session HttpSessionListener、HttpSessionBindingListener使用区别,实现在线人数统计以及踢出用户
- [Java拾遗五]使用Session防止表单重复提交
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- java中使用session监听实现同帐号登录限制、登录人数限制
- 解决java使用jdbc连接hive2出现Required field 'client_protocol' is unset! Struct:TOpenSessionReq
- java web-如何实现IE禁用cookie后继续使用session
- Java for Web学习笔记(十八):Session(2)Session的使用
- Java使用cookie和session管理用户状态
- java 在Jetty9中使用HttpSessionListener和Filter
- 【JavaWeb-7】Cookie记住用户名、历史浏览记录与Session的自动系列化、购物车案例、验证码使用