【Java】WEB应用(二)会话技术详解

正文索引 [隐藏]

Session

用户会话
服务器无法识别每一次HTTP请求的出处(不知道来自于哪个终端),它只会接收到一个请求信号,所以就存在一个问题:将用户的响应发给其他人,必须有一种技术来让服务器知道请求出处,这就是会话技术。
会话:就是客户端和服务端之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程。
会话状态:指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来。
实现会话有两种方式:
1.Session
2.Cookie

属于同一次会话的请求都有一个相同的标识符,sessionID
session常用的方法有
String getId 获取sessionID
void setMaxInactiveInterval(int interval) 设置session失效时间,单位为秒
int getMaxInactiveInterval 获取当前session失效时间
void invalidate() 设置session立即失效
void setAttribute(String key,Object value) 通过键值对的形式来存储数据
Object getAttribute(String key) 通过键来获取对应的数据
void removeAttribute(String key) 通过键来删除对应的数据

下面通过一个简单的Session应用来加强印象,我们在网页上写一个登录,然后进入后台,那如果我们登录后,放入Session后,直接访问后台网址,你看这样行不行呢,下面是代码
这个是登录页面
Session00
然后我们自己定义一个初始化参数,这样做肯定是不对的,账号密码应该是从数据库中来,而不是在后台代码设置
Session01
再下面是登录的Servlet
Session02
再然后是用户登录后的后台,我这样是实例,没有做的很复杂
Session03
最后在后台点击退出登录后,销毁session
Session04

Cookie

Cookie是服务端在HTTP响应中附带传给客户端(浏览器)的一个小的文本文件,一旦浏览器保存了某个Cookie,在之后的请求和响应过程中会将此Cookie来回传递,这样就可以通过Cookie这个载体完成客户端和服务端的数据交互。

  • 创建Cookie
  •         Cookie cookie = new Cookie("name","zhangsan"); //cookie对象
    response.addCookie(cookie);
  • 读取Cookie
  •         Cookie[] cookies = request.getCookies();
    for (Cookie cookie:cookies) {
    out.write(cookie.getName()+":"+cookie.getValue()+"
    ");
    }

    Cookie常用的方法
    void setMaxAge(int Age) 设置Cookie的有效时间,单位为秒
    int getMaxAge() 获取Cookie的有效时间
    String getName() 获取Cookie的Name
    String getValue() 获取Cookie的Value

    session和cookie的区别

    session:保存在服务器,保存的数据是Object,会随着会话的结束而销毁,保存重要信息
    cookie:保存在浏览器,保存的数据是String,可以长期保存在浏览器中,与会话无关,保存不重要信息

    存储用户信息:
    session:setAttribute("name","admin") 存,getAttribute("name") 取,生命周期:1.服务端:只要WEB应用重启就销毁 2.客户端:只要浏览器关闭就销毁。退出登录:直接调用invalidate()方法销毁即可
    cookie:new Cookie("name","admin"),resp.addCookie(cookie) 存,取的话比较麻烦,只能先遍历数组,然后根据名字判断,再取值,例如

    Cookie[] cookies = req.getCookies();  //拿到cookie的集合
    for (Cookie cookie:cookies
    ) {
    if(cookie.getName().equals("name"))
    {
    cookie.setMaxAge(0); //立即销毁
    resp.addCookie(cookie);
    resp.sendRedirect("cookielogin.jsp");
    }
    }

    生命周期:不随服务端的重启而销毁,客户端:默认关闭浏览器就销毁,但是我们可以通过setMaxAge(int Age)设置cookie有效时间则不随浏览器关闭而销毁,而是由设置的时间来决定。退出登录:把setMaxAge(0)设置为0,就立即销毁

    blank