您的位置:首页 > 编程语言 > Java开发

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐