会话管理

HttpSession对象可以保存同一个客户多个请求的会话状态

容器如何知道客户是谁?

    通过唯一的会话ID

怎样得到会话?

HttpSession session = request.getSession();

如果找到与该请求匹配的会话,返回会话,如果没有,创建一个新会话

客户和容器如何交换会话ID信息?

    通过cookie,如果客户端cookie被禁用,则采用URL重写

怎样知道会话是已经存在,还是刚刚创建?

HttpSession session = request.getSession();
if (session.isNew) {
    // is a new session
}
如果只想要一个现有的会话呢?

HttpSession session = request.getSession(false);
if (session == null) {
    //如果不存在,返回null
}
只有告诉响应要对URL编码,URL重写才能奏效

response.encodeURL("/BeerTest.do");//向这个URL增加额外的会话信息
要使用URL重写,页面必须是动态生成的,静态HTML页面不能URL重写。

URL重写只有响应有关

会话的三种死法:

    1.超时
    2.在会话上调用invalidate()
    3.应用结束(崩溃或取消部署)

如何设置会话超时?

    1.DD中配置

<session-config>
    <session-timeout>15</session-timeout>
</session-config>
单位是分钟

    2.设置特定会话的超时(不影响其他会话)

sesson.setMaxInactiveInterval(20 * 60);
单位是秒

使用cookie

// 创建一个新cookie
Cookie cookie = new Cookie("username", username);

// 设置一个cookie在客户端存活多久
cookie.setMaxAge(30 * 60); // 如果是-1,那么浏览器退出时cookie消失

// 把cookie发送到客户
response.addCookie(cookie);

// 从客户请求得到cookie
Cookies[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    if (cookie.getValue().equals("username")) {
        // do something
    }
}
没有得到一个cookie的方法,只能得到cookie数组,遍历操作你想要的cookie



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值