java session的使用

转载自: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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值